以前得到DataSet的时候都是利用直接写sql语句(适合初学者,希望没有误导你们),例如:
public static DataSet GetDs(string sqlstr)
{
ds = new DataSet();
sqlconn = new SqlConnection();
sqlconn.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["connstr"];
sqlconn.Open();
SqlDataAdapter da = new SqlDataAdapter(sqlstr, sqlconn);
da.Fill(ds);
ConnClose();
return ds;
}
其中sqlstr我是直接传进去的sql语句。这样虽然也能得到想要的结果,但是毕竟直接写入sql语句被普遍认为是不好的做法。所以我以后就都是用了存储过程。
我用了两种形式调用存储过程,下面直接给出代码比较直观点:第一种
public bool DelRole(string rolename)
{
try
{
SqlConnection sqlConn = new SqlConnection();
sqlConn.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["connstr"];
sqlConn.Open();
SqlCommand sqlComm = new SqlCommand("DelRole", sqlConn);//DelRole为存储过程名
sqlComm.CommandType = CommandType.StoredProcedure;
sqlComm.Parameters.Add(new SqlParameter("@rolename", SqlDbType.VarChar, 50));
sqlComm.Parameters[0].Value = rolename;
sqlComm.ExecuteNonQuery();
sqlConn.Close();
return true;
}
catch(Exception ex)
{
return false;
}
}
上面代码就是从建立链接到调用存储过程的过程,我之前只是用这种方式去执行存储过程,并不用它返回值,我要得到DataSet是用下面方式得到的:第二种:
public DataSet DriverNameDetail(int driverid)
{
string sqlstr;
DataSet ds = new DataSet();
sqlstr = "exec driver_carslist " + driverid;//driver_carslist为存储过程名,driverid为传入参数
ds = conn.GetDs(sqlstr);
return ds;
}
这样便可以返回一个dataset,其中GetDs(sqlstr)为本文的第一段代码。
下面是我直接用第一种方法得到DataSet:
SqlConnection sqlConn = new SqlConnection();
sqlConn.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["connstr"];
sqlConn.Open();
SqlDataAdapter sqlDa = new SqlDataAdapter("GetAuthListByRole", sqlConn);
sqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
sqlDa.SelectCommand.Parameters.Add(new SqlParameter("@rolename", SqlDbType.VarChar, 50));
sqlDa.SelectCommand.Parameters[0].Value = roleName;
sqlDa.Fill(ds);
sqlConn.Close();
return ds;
public static DataSet GetDs(string sqlstr)
{
ds = new DataSet();
sqlconn = new SqlConnection();
sqlconn.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["connstr"];
sqlconn.Open();
SqlDataAdapter da = new SqlDataAdapter(sqlstr, sqlconn);
da.Fill(ds);
ConnClose();
return ds;
}我用了两种形式调用存储过程,下面直接给出代码比较直观点:第一种
public bool DelRole(string rolename)
{
try
SqlConnection sqlConn = new SqlConnection();
sqlConn.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["connstr"];
sqlConn.Open();
SqlCommand sqlComm = new SqlCommand("DelRole", sqlConn);//DelRole为存储过程名
sqlComm.CommandType = CommandType.StoredProcedure;
sqlComm.Parameters.Add(new SqlParameter("@rolename", SqlDbType.VarChar, 50));
sqlComm.Parameters[0].Value = rolename;
sqlComm.ExecuteNonQuery();
sqlConn.Close();
return true;
}
catch(Exception ex)
{
return false;
}
}
public DataSet DriverNameDetail(int driverid)
{
string sqlstr;
DataSet ds = new DataSet();
sqlstr = "exec driver_carslist " + driverid;//driver_carslist为存储过程名,driverid为传入参数
ds = conn.GetDs(sqlstr);
return ds;
}下面是我直接用第一种方法得到DataSet:
SqlConnection sqlConn = new SqlConnection();
sqlConn.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["connstr"];
sqlConn.Open();
SqlDataAdapter sqlDa = new SqlDataAdapter("GetAuthListByRole", sqlConn);
sqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
sqlDa.SelectCommand.Parameters.Add(new SqlParameter("@rolename", SqlDbType.VarChar, 50));
sqlDa.SelectCommand.Parameters[0].Value = roleName;
sqlDa.Fill(ds);
sqlConn.Close();
return ds;

浙公网安备 33010602011771号