首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参数化查询需要‘@firstname nvarchar,@lastname nvarchar,@phone nvarchar’参数@email,但未提供

参数化查询需要‘@firstname nvarchar,@lastname nvarchar,@phone nvarchar’参数@email,但未提供
EN

Stack Overflow用户
提问于 2020-07-20 09:03:54
回答 1查看 101关注 0票数 0

有没有上师可以帮我解决这个问题呢?我一直在C#中抛出这个异常,但我看到的一切似乎都是正确的。以下是代码

代码语言:javascript
复制
  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();
EN

回答 1

Stack Overflow用户

发布于 2020-07-20 09:40:52

我怀疑您的问题是由于为空参数传递(object)null而不是DBNull.Value造成的。

现在,我通过编写一个扩展方法来绑定来自FormattableString的参数,从而避免了所有的参数样板。

代码语言:javascript
复制
        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}"
        );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62987296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档