我在名为'molasses_analysis'的表中有98列,我需要使用我的c#桌面应用程序插入记录。
我的代码的示例如下所示。
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列编写此类代码并为每列分配 Sql Parameter 将会非常繁忙和痛苦。 我的问题是,是否有更清晰,更好的代码使用c#代码插入多个列?
答案 0 :(得分:4)
简短的回答是否定的;不是您使用局部变量填充每个SqlParameter
的方式。
一种解决方案是,如果每个局部变量都存储在Dictionary(键/值对)中,您可以使用StringBuilder并迭代字典键来构建SQL查询字符串。在同一个循环中,您可以添加每个SqlParameter
。
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));
}
注意:上面的代码是 EXAMPLE ,用于演示使用字典和字符串构建器;它应该被研究,而不是复制粘贴。
答案 1 :(得分:1)
如果您的属性名称和列名称相同,则此答案将对您有所帮助。 首先,使用下面给出的SQL代码获取列名
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'molasses_analysis';
//this returns column names and column types
然后将表分配给包含列名
的列表List<string> listColNames = new List<string>();
然后使用循环
创建sqlInsert字符串foreach (string item in listColNames) {
params.Add(new SqlParameter("@" + item, item));
}