首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在表中插入多个值(在C#中)

在表中插入多个值(在C#中)
EN

Stack Overflow用户
提问于 2017-07-08 20:02:25
回答 2查看 1.3K关注 0票数 4

我在一个名为“molasses_analysis”的表中有98列,我需要使用我的c#桌面应用程序插入记录。

我的代码的示例如下所示。

代码语言:javascript
复制
    string insert_sql = @"insert into molasses_analysis(mo_entry_date, mo_entry_time, mo_code, mo_brix, mo_pol, mo_purity, mo_crtd_by) " +
    " values(@entry_date, @entry_time, @mol_code, @brix, @pol, @purity, @crtd_by)";
    try
        {
         List<SqlParameter> param = new List<SqlParameter>();
         param.Add(new SqlParameter("@entry_date", entry_date));
         param.Add(new SqlParameter("@entry_time", entry_time));
         param.Add(new SqlParameter("@mol_code", mol_code));
         param.Add(new SqlParameter("@brix", brix));
         param.Add(new SqlParameter("@pol", pol));
         param.Add(new SqlParameter("@purity", purity));
         param.Add(new SqlParameter("@crtd_by", crtd_by));
        int inserted_rows = SqlHelper.ExecuteNonQuery(dbConn.sqlConn(),CommandType.Text, insert_sql, param.ToArray());
        }
catch (Exception ex)
      {
        MessageBox.Show("Data not saved!\nError message - "+ex.Message, "Error!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
      }

在这里,我只使用了七个字段/列,但是为98列编写这样的代码并为每一列分配SQLParameter将非常费劲和痛苦。我的问题是,是否有任何使用c#代码插入多列的更干净、更好的代码?

EN

回答 2

Stack Overflow用户

发布于 2017-07-08 20:07:39

简单地说,答案是否定的;与使用局部变量填充每个SqlParameter的方式不同。

一种解决方案是,如果将每个局部变量存储在字典 (键/值对)中,则可以使用StringBuilder并迭代字典键来构建SQL字符串。在相同的循环中,可以添加每个SqlParameter

代码语言:javascript
复制
using System.Collections.Generic; // for dictionary
using System.Text; // for stringbuilder

// ...

// create a dictionary then use a literal to make it easier to populate
Dictionary<string, string> data = new Dictionary<string, string>
{
    { "entry_date", "SOMEVALUE1" }, 
    { "entry_time", "SOMEVALUE2" }
    // add more params and values here...
};

// start our query and params list
StringBuilder query = new StringBuilder("YOUR QUERY STARTS HERE");
List<SqlParameter> params = new List<SqlParameter>();

// iterate over each key/value pair, appending to the query and params list
foreach (KeyValuePair<string, string> pair in data) {
    query.Append("@" + pair.Key);
    params.Add(new SqlParameter(pair.Key, pair.Value));
}

注意事项:上面的代码是演示使用字典和字符串构建器的示例;应该研究它,而不是复制粘贴。

票数 4
EN

Stack Overflow用户

发布于 2017-07-08 20:24:59

如果您的属性名称和列名相同,则此答案将对您有所帮助。首先,使用下面给出的SQL代码获取列名

代码语言:javascript
复制
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'molasses_analysis';
//this returns column names and column types

然后将表分配到包含列名的列表中。

代码语言:javascript
复制
List<string> listColNames = new List<string>(); 

然后用循环创建sqlInsert字符串

代码语言:javascript
复制
foreach (string item in listColNames) {
    params.Add(new SqlParameter("@" + item, item));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44990272

复制
相关文章

相似问题

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