C# 中用 Sqlparameter 的两种用法
新建一个表:
createtableabc ( idintIDENTITY(1,1)NOTNULL, namenvarchar(100), sexnvarchar(10) ) insertintoabcvalues(‘asf','男') insertintoabcvalues(‘ai','女')
创建表格完成。
新建一个存储过程:
createprocedureselbyid ( @idint, @thenamenvarchar(100)output ) as select@thename=namefromabcwhereid=@id
在执行的过程中可以用sqlparameter的几种格式来调用存储过程:
第一种是:
publicstringconnString=ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;//存储链接字符串,方便资源复用。
publicSqlConnectiongetcon()
{
SqlConnectionconn=newSqlConnection();
conn.ConnectionString=connString;
returnconn;
}
privatevoidbtnsqlparauseing_Click(objectsender,EventArgse)
{
SqlConnectioncon=getcon();
con.Open();
stringsqlstr="insertintoabcvalues(@name,@sex)";//免除sql注入攻击
SqlCommandcmd=newSqlCommand();
cmd.Connection=con;
cmd.CommandText=sqlstr;
SqlParameterpara=newSqlParameter();//声明参数
para=newSqlParameter("@name",SqlDbType.NVarChar,100);//生成一个名字为@Id的参数,必须以@开头表示是添加的参数,并设置其类型长度,类型长度与数据库中对应字段相同,但是不能超出数据库字段大小的范围,否则报错。
para.Value=txtname.Text.ToString().Trim();//这个是输入参数,所以可以赋值。
cmd.Parameters.Add(para);//参数增加到cmd中。
para=newSqlParameter("@sex",SqlDbType.NVarChar,10);
para.Value=txtsex.Text.ToString().Trim();
cmd.Parameters.Add(para);
inti=cmd.ExecuteNonQuery();//执行sql语句,并且返回影响的行数。
MessageBox.Show(i.ToString()+"命令完成行受影响插入成功","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
con.Close();
}
2.第二种是调用sqlparameter几种方式来调用存储过程:
1.
privatevoidbtnshuchu_Click(objectsender,EventArgse)
{
SqlConnectioncon=getcon();
con.Open();
SqlCommandcmd=newSqlCommand();
cmd.Connection=con;
cmd.CommandText="selbyid";//存储过程的名称
cmd.CommandType=CommandType.StoredProcedure;//说明是存储过程
SqlParameterpara=newSqlParameter();//声明sqlparameter参数
para=newSqlParameter("@id",SqlDbType.Int);//这个参数是输入参数
para.Value=int.Parse(txtid.Text.ToString().Trim());//因为是输入参数所以可以赋值
cmd.Parameters.Add(para);//加入cmd中
para=newSqlParameter("@thename",SqlDbType.NVarChar,100);//参数的大小可以小于数据库的参数规定值,但不能够大于数据库的参数大小。
cmd.Parameters.Add(para);//和下面一句不可掉乱,先增加再指明它是输出参数来的。
cmd.Parameters["@thename"].Direction=ParameterDirection.Output;//增加后,用output说明是输出参数。
inti=cmd.ExecuteNonQuery();
stringname=cmd.Parameters["@thename"].Value.ToString();//经过执行,存储过程返回了输出参数。
MessageBox.Show("命令完成"+name+"是所查记录","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
con.Close();
}
套路就是:输出参数先声明,再赋值,再加入cmd的参数中,最后用cmd.ExecuteNonQuery()执行。
2.用AddWithValue:
privatevoidbtnothers_Click(objectsender,EventArgse)
{
SqlConnectioncon=getcon();
SqlCommandcmd=newSqlCommand();
cmd.Connection=con;
cmd.CommandText="selbyid";
cmd.CommandType=CommandType.StoredProcedure;
SqlParameterpara=newSqlParameter();
cmd.Parameters.AddWithValue("@id",Convert.ToInt32(txtid.Text.Trim()));//输入参数可以用addWithValue来格式化参数,但输出参数只能用Add
cmd.Parameters.Add("@thename",SqlDbType.NVarChar,100).Direction=ParameterDirection.Output;//和下面一句不可顺序掉乱,否则会报错,先加入cmd中再指明它是输出参数来的。
con.Open();
inti=cmd.ExecuteNonQuery();
stringname=cmd.Parameters["@thename"].Value.ToString();//输出参数返回一个数值。
MessageBox.Show("命令完成"+name+"是所查记录","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
con.Close();
}
3.用参数数组实现调用输入和输出参数的存储过程:
privatevoidbtnshuzu_Click(objectsender,EventArgse)
{
SqlConnectioncon=getcon();
SqlCommandcmd=newSqlCommand();
cmd.Connection=con;
cmd.CommandText="selbyid";
cmd.CommandType=CommandType.StoredProcedure;
SqlParameter[]para={newSqlParameter("@id",SqlDbType.Int)};
para[0].Value=Convert.ToInt32(txtid.Text.ToString().Trim());
cmd.Parameters.AddRange(para);//输入参数和输出参数分别加入到cmd.Parameter中。
cmd.Parameters.Add("@thename",SqlDbType.NVarChar,100).Direction=ParameterDirection.Output;//和下面一句不可掉乱,先增加再指明它是输出参数来的。
con.Open();
inti=cmd.ExecuteNonQuery();
stringname=cmd.Parameters["@thename"].Value.ToString();
MessageBox.Show("命令完成"+name+"是所查记录","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
con.Close();
}
总结
以上所述是小编给大家介绍的C#中用Sqlparameter的两种用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!