C# 存储过程使用示例

C# 存储过程使用示例,c#,sql,C#,Sql,如何在连接字符串中使用存储过程而不是查询。您可以建议我进行编码吗?您需要定义sql命令(在本例中是对存储过程的调用),然后连接到数据库,发送查询并接收结果 以后别忘了关闭连接 网上有一个很好的教程 我无法在这里描述整个过程,如果您有更详细的问题,请回来询问-这就是Stackoverflow的目的:)给您 string spName = "stored_proc_name"; string idParameterValue = "someId"; using (SqlConnection con

如何在连接字符串中使用存储过程而不是查询。您可以建议我进行编码吗?

您需要定义sql命令(在本例中是对存储过程的调用),然后连接到数据库,发送查询并接收结果

以后别忘了关闭连接

网上有一个很好的教程

我无法在这里描述整个过程,如果您有更详细的问题,请回来询问-这就是Stackoverflow的目的:)

给您

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
    }
}
(*)选择适当的方法:

  • 将输出结果集保存到数据集中

    // Store output result set in the DataSet
    DataSet ds = ExecuteQuery(da);
    
  • 或者读取单个整数作为存储过程返回值(而不是OUT参数!)

  • 如果存储过程不返回任何内容

    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;
        }
    }
    
    有用链接:


    我希望您知道连接字符串用于其他目的而不是查询,而不是在连接字符串中查询。请花一些时间来制定一个实际的问题。使用
    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;
        }
    }