【问题标题】:Using SqlCommand , how to add multiple parameters to its object , insertion via winform in sql table使用 SqlCommand ,如何向其对象添加多个参数,通过 winform 在 sql 表中插入
【发布时间】:2011-07-26 14:37:09
【问题描述】:

我的 winform 中有十个文本框,我需要将在这些文本框中输入的文本保存到 sql 数据库表的 10 列中。所以,为此我应该写:

INSERT INTO item (c1,c2,c3...,c10) values (@a,@b....@j) 

cmd.Parameters.Add("@a",SqlDbType.Varchar)
cmd.Parameteres["@a"].Value=textbox1.Text;

cmd.Parameters.Add("@b",SqlDbType.Varchar)
cmd.Parameteres["@b"].Value=textbox2.Text;.
.
.
.
.
cmd.Parameters.Add("@j",SqlDbType.Varchar)
cmd.Parameteres["@j"].Value=textbox10.Text;

每个文本框有十个单独的查询:

INSERT INTO item (c1) values (@a)
cmd.Parameters.Add("@a",SqlDbType.Varchar)
cmd.Parameteres["@a"].Value=textbox1.Text;

INSERT INTO item (c2) values (@b) 
cmd.Parameters.Add("@b",SqlDbType.Varchar)
cmd.Parameteres["@b"].Value=textbox2.Text;.
.
.
INSERT INTO item (c10) values (@j)
cmd.Parameters.Add("@j",SqlDbType.Varchar)
cmd.Parameteres["@j"].Value=textbox10.Text;

或者,请建议一个有效的代码。

如何在一条语句中给cmd添加多个参数?有可能吗?

【问题讨论】:

    标签: c# .net sql sql-server-2005 sqlcommand


    【解决方案1】:

    您可以使用扩展方法,如下所示:

    public static class DbCommandExtensions
    {
        public static void AddInputParameters<T>(this IDbCommand cmd,
            T parameters) where T : class
        {
            foreach (var prop in parameters.GetType().GetProperties())
            {
                object val = prop.GetValue(parameters, null);
                var p = cmd.CreateParameter();
                p.ParameterName = prop.Name;
                p.Value = val ?? DBNull.Value;
                cmd.Parameters.Add(p);
            }
        }
    }
    

    然后这样称呼它:

    cmd.AddInputParameters(new { a = textBox1.Text, b = TextBox2.Text, /* etc */ });
    

    我已经在几个项目中使用了它,没有任何问题。

    【讨论】:

    • 先生,我正在使用 .net 2.0,所以代替 'var' 和 我应该使用什么?
    • IDbCommand.CreateParameter 返回一个 IDbDataParameter,因此声明“p”。否则,据我所知,这在 .NET 2.0 中应该可以正常工作。
    【解决方案2】:

    我认为你可以使用Parameters.AddWithValue() 方法。

    cmd.Parameters.AddWithValue("@j",textbox10.Text);
    cmd.Parameters.AddWithValue("@k",textbox11.Text);
    cmd.Parameters.AddWithValue("@l",textbox12.Text);
    

    【讨论】:

      【解决方案3】:

      您在问题中建议的 2 个“解决方案”在语义上是不同的。 您应该使用哪一个,取决于您的表格布局。

      第一个解决方案在表中插入一条记录,第二个插入语句为每个值(文本框)插入一条记录(行)。

      这里很难给出一个好的答案,因为我们不知道你要在那个表中保存什么,因此,我们不能说你应该如何保存它(你如何保存它,本质上取决于方式您应该调用 SQL 插入语句)。

      【讨论】:

        【解决方案4】:

        你可以使用这样的函数:

        void AddParams(DBCommand cmd,params object[] parameters)
        {
            if (parameters != null)
            {
                int index = 0;
                while (index < parameters.Length)
                {
                    cmd.Parameters.AddWithValue("@"+(string)parameters[index], parameters[index + 1]);
                    index += 2;
                }
            }
        }
        

        可能不是最好的,但很实用。 调用链接:

        AddParams(a,"test1",b,3,c,DateTime.Now);
        

        或者您可以使用@Matt Hamilton 建议的扩展在 DBCommand 类中添加此功能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-27
          • 1970-01-01
          • 2019-08-02
          相关资源
          最近更新 更多