如何在连接字符串中使用存储过程而不是查询。你能建议我编码???
答案 0 :(得分:2)
你去吧
string spName = "stored_proc_name";
string idParameterValue = "someId";
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
using (SqlCommand command = new SqlCommand(spName, connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@Id", idParameterValue));
connection.Open();
IDbDataAdapter da = new SqlDataAdapter();
da.SelectCommand = command;
// (*) Put here a code block of the actual SP execution logic
// There are different ways of SP execution and it depends on
// return result set type, see below
}
}
(*)选择合适的方法:
将输出结果集保存在DataSet中
// Store output result set in the DataSet
DataSet ds = ExecuteQuery(da);
或者读取单个整数作为存储过程返回值(不是OUT参数!)
IDataReader reader = command.ExecuteReader();
if (reader != null && reader.Read())
{
retValue = (reader.GetInt32(returnParamName));
}
如果存储过程没有返回任何内容
bool successfull = cmd.ExecuteNonQuery() == 1;
帮助方法
private static DataSet ExecuteQuery(IDataAdapter da)
{
DataSet ds = new DataSet("rawData");
da.Fill(ds);
ds.Tables[0].TableName = "row";
foreach (DataColumn c in ds.Tables[0].Columns)
{
c.ColumnMapping = MappingType.Attribute;
}
return ds;
}
public static class DataReaderExtensions
{
public static Int32 GetInt32(this IDataReader rdr, string fieldName)
{
int ordinal = rdr.GetOrdinal(fieldName);
return !rdr.IsDBNull(ordinal) ? rdr.GetInt32(ordinal) : Int32.MinValue;
}
}
有用的链接:
答案 1 :(得分:0)
您需要定义sql-commands(在本例中是对存储过程的调用),然后连接到数据库,发送查询并接收结果。
不要忘记之后关闭连接!
csharp-station上有一个很好的教程在线。
我无法在此描述整个过程,如果您有更详细的问题,请回过头来询问 - 这就是Stackoverflow的用途:)