SqlServer参数化查询与存储过程
为了防止Sql注入我们使用参数化查询的方法,为了节省Sql语句的编译时间我们使用存储过程,这两个看似毫不相干的东西,其实是同一个玩意,不信看我给你解释。 参数化查询:执行参数化查询代码: public static int ParamInsert(string userId,string userName,string gender)
{
int rowNumber = -100;
string connString = ConfigurationManager.ConnectionStrings["connString"].ToString();
SqlConnection con = new SqlConnection(connString);
con.Open();
#region 参数化插入
SqlCommand cmd1 = new SqlCommand("insert into UserInfo values(@userId,@userName,getdate(),@gender)",con);
cmd1.Parameters.Add("@userId",SqlDbType.Int).Value = userId;
cmd1.Parameters.Add("@userName",SqlDbType.NVarChar,20).Value = userName;
cmd1.Parameters.Add("@gender",2).Value = gender;
rowNumber = cmd1.ExecuteNonQuery();
cmd1.Dispose();
#endregion
#region 参数化查询
SqlCommand cmd = new SqlCommand("select * from UserInfo where UserId = @UserId",con);
cmd.Parameters.Add("@UserId",SqlDbType.Int).Value = userId;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds,"userInfo");
DataTable dt = ds.Tables[0];
DataRow row = dt.Rows[0];
cmd.Dispose();
#endregion
con.Close();
return rowNumber;
}
参数化查询与普通查询的区别在sql语句地书写上, 存储过程:创建insert存储过程代码 CREATE PROCEDURE [dbo].[Proc_InsertUserInfo] @UserId int,@UserName nvarchar(20),@AddTime datetime,@Gender nvarchar(2) AS BEGIN SET NOCOUNT ON;
insert into dbo.UserInfo values(@UserId,@UserName,@AddTime,@Gender)
END
创建select存储过程代码 ALTER PROCEDURE [dbo].[Proc_SelectUserInfo] @UserId int AS BEGIN SET NOCOUNT ON;
SELECT * from dbo.UserInfo where UserId=@UserId
END
执行存储过程代码: public static int Insert(string userId,string gender)
{
int rowNumber = -100;
string strConnection = ConfigurationManager.ConnectionStrings["connString"].ToString();
SqlConnection con = new SqlConnection(strConnection);
con.Open();
#region 存储过程插入
SqlCommand cmd1 = new SqlCommand("Proc_InsertUserInfo",con);
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.Add("@UserId",SqlDbType.Int).Value = userId; ;
cmd1.Parameters.Add("@UserName",20).Value = userName;
cmd1.Parameters.Add("@AddTime",SqlDbType.DateTime).Value = DateTime.Now.ToString();
cmd1.Parameters.Add("@Gender",2).Value = gender == "1" ? "男" : "女";
rowNumber = cmd1.ExecuteNonQuery();
cmd1.Dispose();
#endregion
#region 存储过程查询
SqlCommand cmd = new SqlCommand("Proc_SelectUserInfo",con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@UserId",SqlDbType.Int).Value = userId;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
rowNumber = adapter.Fill(ds,"userInfo");
DataTable dt = ds.Tables[0];
DataRow row = dt.Rows[0];
#endregion
con.Close(a);
return rowNumber;
}
存储过程中的插入代码: 结论参数化查询和存储过程在声明方式和使用方式上大体相同,不同点有3:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |