c# - 参数化查询需要'@firstname nvarchar、@lastname nvarchar、@phone nvarchar 需要参数@email,但未提供
问题描述
有没有大师可以帮助我解决这个问题?我一直在 C# 中抛出这个异常,但我能看到的一切似乎都是正确的。这是代码
public bool Insert(loginBLL u)
{
bool isSuccess = false;
SqlConnection conn = new SqlConnection(myconnstrng);
try
{
String sql = "INSERT INTO customers (firstname, lastname, phone, email, address, city, state, zipcode, password, username) VALUES (@firstname, @lastname, @phone, @email, @address, @city, @state, @zipcode, @password, @username)";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@firstname", u.firstname);
cmd.Parameters.AddWithValue("@lastname", u.lastname);
cmd.Parameters.AddWithValue("@phone", u.phone);
cmd.Parameters.AddWithValue("@email", u.email);
cmd.Parameters.AddWithValue("@address", u.address);
cmd.Parameters.AddWithValue("@city", u.city);
cmd.Parameters.AddWithValue("@state", u.state);
cmd.Parameters.AddWithValue("@zipcode", u.zipcode);
cmd.Parameters.AddWithValue("@password", u.password);
cmd.Parameters.AddWithValue("@username", u.username);
conn.Open();
int rows = cmd.ExecuteNonQuery();
解决方案
我怀疑你的问题是由于传递(object)null
而不是DBNull.Value
空参数。
这些天来,我会通过编写一个扩展方法来绑定来自FormattableString
.
public static SqlCommand GetCommandInterpolated(this SqlConnection conn, FormattableString sql)
{
var cmd = conn.CreateCommand();
var replacements = new string[sql.ArgumentCount];
var args = sql.GetArguments();
for (int i = 0; i < sql.ArgumentCount; i++)
{
var p = cmd.CreateParameter();
cmd.Parameters.Add(p);
p.ParameterName = replacements[i] = $"@p_{i}";
p.Value = args[i] ?? DBNull.Value;
}
cmd.CommandText = string.Format(sql.Format, replacements);
return cmd;
}
var cmd = conn.GetCommandInterpolated(
$@"INSERT INTO customers (firstname, lastname, phone, email, address, city, state, zipcode, password, username)
VALUES ({u.firstname}, {u.lastname}, {u.phone}, {u.email}, {u.address}, {u.city}, {u.state}, {u.zipcode}, {u.password}, {u.username}"
);
推荐阅读
- angular - DevExtreme 文件上传 - 获取组件中的文件内容
- linux - 从 Linux 操作系统中获得独特的价值
- scrapy - 找不到环境 ScrapyEnvironment
- reactjs - React 在父组件内的按钮的 onClick 内运行函数
- wordpress - Woocommerce 禁用电子邮件以创建帐户
- sql - 如何在 ARRAY 中选择 privilege_type?
- javascript - 如何在 JavaScript(本地文件)中一次转换多个文件?
- node.js - 无法达到单个服务器的最大 tcp 连接数
- c# - 来自 dispose 或析构函数的 Stacktrace 不完整
- ios - 在 UnitTesting 中获取 AppDelegate 窗口为零