用存储过程啊,这个写起来方便internal class WSqlCommand : IDisposable
{
private SqlCommand m_SqlCmd  = null;
private string     m_connStr = "";

/// <summary>
/// 默认构造方法.
/// </summary>
/// <param name="connectionString">连接字符串.</param>
/// <param name="commandText">命令文本.</param>
public WSqlCommand(string connectionString,string commandText)
{
m_connStr = connectionString;

m_SqlCmd = new SqlCommand(commandText);
m_SqlCmd.CommandType    = CommandType.StoredProcedure;
m_SqlCmd.CommandTimeout = 180;
} public WSqlCommand(string connectionString)
{
m_connStr = connectionString;

m_SqlCmd = new SqlCommand();
m_SqlCmd.CommandType    = CommandType.Text;
m_SqlCmd.CommandTimeout = 180;
} #region function Dispose public void Dispose()
{
if(m_SqlCmd != null)
{  
m_SqlCmd.Dispose();
}
} #endregion
#region function AddParameter /// <summary>
/// 添加SQL命令参数
/// </summary>
/// <param name="name">参数 名称.</param>
/// <param name="dbType">参数 MSSQL数据类型</param>
/// <param name="value">参数 值</param>
public void AddParameter(string name,SqlDbType dbType,object value)
{
SqlDbType dbTyp = dbType;
object val = value; if(val is DateTime)
{
DateTime date = (DateTime)value;
val = new DateTime(date.Year,date.Month,date.Day,date.Hour,date.Minute,0,0);
} if(dbType == SqlDbType.UniqueIdentifier)
{
dbTyp = SqlDbType.NVarChar;
string guid = val.ToString();
if(guid.Length < 1)
{
return;
}
} m_SqlCmd.Parameters.Add(name,dbTyp).Value = val;
} #endregion #region fucntion Execute /// <summary>
/// 执行命令.
/// </summary>
/// <returns>返回DataSet类型</returns>
public DataSet Execute()
{
DataSet dsRetVal = null; using(SqlConnection con = new SqlConnection(m_connStr))
{
con.Open();
m_SqlCmd.Connection = con;

dsRetVal = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(m_SqlCmd);
adapter.Fill(dsRetVal); adapter.Dispose();
} return dsRetVal;
}
public int ExecuteNonQuery()
{
int i=-1;
using(SqlConnection con = new SqlConnection(m_connStr))
{
con.Open();
m_SqlCmd.Connection = con;
i=m_SqlCmd.ExecuteNonQuery();
}
return i;
}
#endregion
#region Properties Implementaion /// <summary>
/// 获取或设置命令超时时间.
/// </summary>
public int CommandTimeout
{
get{ return m_SqlCmd.CommandTimeout; } set{ m_SqlCmd.CommandTimeout = value; }
} /// <summary>
/// 获取或设置命令类型.
/// </summary>
public CommandType CommandType
{
get{ return m_SqlCmd.CommandType; }
          
set{ m_SqlCmd.CommandType = value; }
}
       
public string CommandText
{
get{return m_SqlCmd.CommandText;}
set{m_SqlCmd.CommandText=value; }
}
#endregion }

解决方案 »

  1.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.asp
      

  2.   

    调用 
    public DataView GetUser(string Account)
    {
    using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"disku_GetUser"))
    {
    sqlCmd.AddParameter("@Account" ,SqlDbType.NVarChar,Account);
    DataSet ds = sqlCmd.Execute();
    ds.Tables[0].TableName = "User"; return ds.Tables["User"].DefaultView;
    }
    } 其实用法很多,这个是我常用的一个,调用方便,不用写一大堆参数
    另外自动释放连接
      

  3.   

    M$的Data Access Application Block for .NET
      

  4.   

    我用的也是这个
    Data Access Application Block for .NET
      

  5.   

    这个是Data Access Application Block for .NET是什么哦?哪里找?
      

  6.   

    Data Access Application Block for .NET到Google搜也应该能找到吧
      

  7.   

    You can use <<Data Access Application Block for .NET>>
      

  8.   

    Data Access Application Block for .NET,你可以参考微软的,增加自己的一些东西
      

  9.   

    我记得MSDN上面有,楼主可以找找看,好像是用存储过程来做的.
      

  10.   

    研究一下微软的Data Access Application Block for .NET,然后参考做一个适合自己用的。
      

  11.   

    orm怎么不考虑呢,开源的有nhibernate呢
      

  12.   

    Data Access Application Block for .NET