在查询字符串中传递 NULL 值
Passing NULL values in a query string
我有一个名为 "InsertEmpolyee" 的函数,它接收参数来填充查询字符串。问题是,我想让其中一些变量成为可选变量,换句话说,我希望能够在不向这些参数传递值的情况下调用该函数,并且仍然通过将 NULL 插入数据库来生成正确的查询字符串。
这是 InsertEmployee 函数
public int InsertEmployee(string FirstName, char Minit, string LastName, int SSN
, int? Salary)
{
string query = "INSERT INTO Employee (Fname, Minit, Lname, SSN, Salary) " + "Values ('" + FirstName + "','" + Minit + "','" + LastName + "'," + Salary + ");";
return model.ExecuteNonQuery(query);
}
我是这样称呼它的。
int res = Controlobj.InsertEmployee(txtbox_FirstName.Text, txtbox_Minit.Text[0],
txtbox_LastName.Text, Int32.Parse(txtbox_SSN.Text), null);
我已尝试执行以下操作
if (!Salary.HasValue)
Salary = DBNull.Value;
但是它给了我以下错误"Can't implicitly convert system.DBNull to int?"
我该如何解决这个问题?有没有更好的方法来做到这一点?
您的代码不仅在 null
上失败,而且在包含撇号的字符串上也失败。也可能有其他陷阱。这就是我们使用参数的原因。
public int InsertEmployee(string Fname, char Minit, string Lname, int SSN, int? Salary)
{
return model.ExecuteNonQuery(
@"
INSERT INTO Employee (
Fname, Minit, Lname, SSN, Salary
) VALUES (
@Fname, @Minit, @Lname, @SSN, @Salary
)
",
new SqlParameter("@Fname", SqlDbType.VarChar) { Value = (object)Fname ?? System.DBNull.Value },
new SqlParameter("@Minit", SqlDbType.VarChar) { Value = Minit },
new SqlParameter("@Lname", SqlDbType.VarChar) { Value = (object)Lname ?? System.DBNull.Value },
new SqlParameter("@SSN", SqlDbType.Int ) { Value = SSN },
new SqlParameter("@Salary", SqlDbType.Int ) { Value = (object)Salary ?? System.DBNull.Value });
}
我有一个名为 "InsertEmpolyee" 的函数,它接收参数来填充查询字符串。问题是,我想让其中一些变量成为可选变量,换句话说,我希望能够在不向这些参数传递值的情况下调用该函数,并且仍然通过将 NULL 插入数据库来生成正确的查询字符串。
这是 InsertEmployee 函数
public int InsertEmployee(string FirstName, char Minit, string LastName, int SSN
, int? Salary)
{
string query = "INSERT INTO Employee (Fname, Minit, Lname, SSN, Salary) " + "Values ('" + FirstName + "','" + Minit + "','" + LastName + "'," + Salary + ");";
return model.ExecuteNonQuery(query);
}
我是这样称呼它的。
int res = Controlobj.InsertEmployee(txtbox_FirstName.Text, txtbox_Minit.Text[0],
txtbox_LastName.Text, Int32.Parse(txtbox_SSN.Text), null);
我已尝试执行以下操作
if (!Salary.HasValue)
Salary = DBNull.Value;
但是它给了我以下错误"Can't implicitly convert system.DBNull to int?"
我该如何解决这个问题?有没有更好的方法来做到这一点?
您的代码不仅在 null
上失败,而且在包含撇号的字符串上也失败。也可能有其他陷阱。这就是我们使用参数的原因。
public int InsertEmployee(string Fname, char Minit, string Lname, int SSN, int? Salary)
{
return model.ExecuteNonQuery(
@"
INSERT INTO Employee (
Fname, Minit, Lname, SSN, Salary
) VALUES (
@Fname, @Minit, @Lname, @SSN, @Salary
)
",
new SqlParameter("@Fname", SqlDbType.VarChar) { Value = (object)Fname ?? System.DBNull.Value },
new SqlParameter("@Minit", SqlDbType.VarChar) { Value = Minit },
new SqlParameter("@Lname", SqlDbType.VarChar) { Value = (object)Lname ?? System.DBNull.Value },
new SqlParameter("@SSN", SqlDbType.Int ) { Value = SSN },
new SqlParameter("@Salary", SqlDbType.Int ) { Value = (object)Salary ?? System.DBNull.Value });
}