C#代码
ExecuteReader(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)以params声明的形参说明参数的个数是可选的,可以为0个或多个。
以params声明的形参中含一个参数数组,则该参数数组必须位于形参列表最后;以params声明的参数数组必须是一维数组;以params声明的形参当为多个时,以","分开传入.一个参数:
C#代码 ExecuteReader(System.Data.CommandType.Text,"select * from table1 where id =@id",new System.Data.SqlClient.SqlParameter("@id",12));多个参数:
C#代码 ExecuteReader(System.Data.CommandType.Text,"select * from table1 where id =@id and name=@name",new System.Data.SqlClient.SqlParameter("@id",12),new System.Data.SqlClient.SqlParameter("@name","中国"));或者: public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { //... } SqlParameter a = new SqlParameter("@id", "12"); SqlParameter b = new SqlParameter("@name", "中国"); ExecuteNonQuery(conn, cmdType, cmdText, a, b); 或者:sqlParameter[] paras =new SqlParameter[]{ new SqlParameter("@id", "12"), new SqlParameter("@name", "中国")};ExecuteNonQuery(conn, cmdType, cmdText, paras);因为是params 声明的,所以这个参数可以不填。或传入一个事先设置好的SqlParameter类型的数组。
注意:
当SqlParameter的构造函数为:SqlParameter(string, object)
当在 value 参数中指定 Object 时,SqlDbType 将从 Object 的 .NET Framework 类型推断出。请小心使用 SqlParameter 构造函数的这个重载来指定整数参数值。 因为此重载接受 Object 类型的 value,所以当此值为零时,必须将整数值转换为 Object 类型,如下面的 C# 示例所示。
Parameter = new SqlParameter("@pname", Convert.ToInt32(0));
如果不执行该转换,则编译器将认为您尝试调用 SqlParameter(string、SqlDbType)构造函数重载
解释:1:通俗点说就是0是设置默认的SqlDbType。
几乎相当与在其他语言中设置默认参数时使用null一样 而Convert.ToInt32(0)相当于转义,把设置默认参数的0转化为真实的数值0 2:在编程中0表示的类型:可以是true,可以看成空,也可以是整数。 所以必须给它一个确定的类型。 第一种: SqlCommand1.Parameters.Add(参数名称,参数值); //参数值为0时,必须转换为Object类型 //如果不执行该转换,则编译器将认为您尝试调用 SqlParameter(string、SqlDbType)构造函数重载 //或者使用第二种,确定参数类型,并赋值,不需要转换第二种: SqlCommand1.Parameters.Add(参数名称,参数类型,参数长度,参数所在列的名字); 然后再SqlCommand1.Parameters[ "参数名称 "].value=参数的值; 或SqlCommand1.Parameters.Add(参数名称,参数类型,参数长度,参数所在列的名字).value=参数的值;