使用SqlCommand,如何为其对象添加多个参数,通过winform插入sql表

问题描述 投票:0回答:5

我的winform中有10个文本框,我需要将这些文本框中输入的文本保存到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;

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

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
5个回答
10
投票

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

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 */ });

我在一些项目中使用过它,没有任何问题。


10
投票

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

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

2
投票

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

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

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


0
投票

你可以使用这样的函数:

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 类中添加此函数。


0
投票

也可以这样..

cmd.Parameters.Add("@j", SqlDbType.Varchar).Value = textbox10.Text;
© www.soinside.com 2019 - 2024. All rights reserved.