public class Database : IDisposable 
{
    // connection to data source
    private SqlConnection conn;
    public Database()
    {
      //
      // TODO: 在此处添加构造函数逻辑
      //
    }    /// <summary>
    /// 以Cmd为参数,执行存储过程,返回DataTable。
    /// </summary>
    /// <param name="cmd"></param>
    /// <returns></returns>
    public DataTable RunProcDataTable(ref SqlCommand cmd)
    {
      SqlDataReader dbRead;      // make sure connection is open
      Open();      cmd.Connection = conn;
      
      try
      {
        dbRead = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        //this.Close();        DataTable dt = new DataTable();        dt.Load(dbRead);        return dt;
      }
      catch
      {
        return null;
      }
    }    ///<summary>
    ///Open the connection.
    ///</summary>
    private void Open()
    {
      // open connection
      if (conn == null)
      {
        string StrConn = "server=jie;database=J_Manage;uid=sa;pwd=password";
        conn = new SqlConnection(StrConn);
        
        
        conn.Open();      }
    }    ///<summary>
    ///Close the connection.
    ///</summary>
    public void Close()
    {
      if (conn != null)
        conn.Close();
    }    ///<summary>
    ///Release resources.
    ///</summary>
    public void Dispose()
    {
      //make sure connection is closed
      if (conn != null)
      {
        conn.Dispose();
        conn = null;
      }
    }
}

解决方案 »

  1.   

    修改一下, 参考如下代码:public DataTable RunProcDataTable(string sql)
    {
        DataTable dt = null;    try
        {
            conn.Open();
            
            SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);        adapter.Fill(dt);
        }
        catch (Exception error)
        {
            throw error;
        }
        finally
        {
            conn.Close();
        }    return dt;
    }
      

  2.   

    如果一定要传入SqlCommand, 可以改为(参考):SqlDataAdapter adapter = new SqlDataAdapter();adapter.SelectCommand = cmd;adapter.SelectCommand.Connection = conn;adapter.Fill(dt);
      

  3.   

    谢谢您的回复,但我这儿是要执行的存储过程,您给的是执行sql语句的方法,差异比较大。
    不过不是我想要的,执行sql语句的方法我已经实现了
      

  4.   

    谢谢,我试试你写的传入 cmd的方法
      

  5.   

    sqldataAdapter
    sqlcommandbuilder(sqldataAdapter)
      

  6.   

    if (ds.HasChanges())
                    {
                        sdaTable_sycg.Update(ds, ds.Tables["sycg"].ToString());
                        ds.AcceptChanges();
                    }
    //我程序里面的
      

  7.   

    谢谢shinaterry ,你的方法执行cmd可行,谢谢