【发布时间】:2016-01-25 17:23:30
【问题描述】:
我有一个程序,目前被硬编码以发送一些用户输入到 DBF 文件中的参数。我不能将参数留空(DBF 似乎不允许这样做),所以现在我只是输入一个空白,这不一定是问题。
这是目前为止的方法;
public bool SendToDBF(string name, string town, string pcode)
{
int id, querytype, personID;
string whatfile, netname, whatProgram, blank;
id = 1;
whatfile = "Compns";
querytype = 1;
netname = Environment.UserName;
personID = 8948;
whatProgram = "Sales";
blank = "";
try
{
string constr = ConfigurationManager.ConnectionStrings["dbfString"].ConnectionString;
using (var dbfCon = new OleDbConnection(constr))
{
dbfCon.Open();
var dbfCmd = new OleDbCommand("INSERT INTO fromsql VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", dbfCon);
dbfCmd.Parameters.Clear();
dbfCmd.Parameters.AddWithValue("@fq_uniqid", id);
dbfCmd.Parameters.AddWithValue("@fq_whfile", whatfile);
dbfCmd.Parameters.AddWithValue("@fq_what", querytype);
dbfCmd.Parameters.AddWithValue("@fq_whonm", netname);
dbfCmd.Parameters.AddWithValue("@fq_whoid", personID);
dbfCmd.Parameters.AddWithValue("@fq_whoprog", whatProgram);
dbfCmd.Parameters.AddWithValue("@param1", name);
dbfCmd.Parameters.AddWithValue("@param2", town);
dbfCmd.Parameters.AddWithValue("@param3", pcode);
dbfCmd.Parameters.AddWithValue("@param4", blank);
dbfCmd.Parameters.AddWithValue("@param5", blank);
dbfCmd.Parameters.AddWithValue("@param6", blank);
dbfCmd.Parameters.AddWithValue("@param7", blank);
dbfCmd.Parameters.AddWithValue("@param8", blank);
dbfCmd.Parameters.AddWithValue("@param9", blank);
dbfCmd.Parameters.AddWithValue("@param10", blank);
dbfCmd.Parameters.AddWithValue("@param11", blank);
dbfCmd.Parameters.AddWithValue("@param12", blank);
dbfCmd.Parameters.AddWithValue("@param13", blank);
dbfCmd.Parameters.AddWithValue("@paraml1", blank);
dbfCmd.Parameters.AddWithValue("@paraml2", blank);
dbfCmd.ExecuteNonQuery();
return true;
}
}
catch (OleDbException ex)
{
MessageBox.Show("Error Updating MySQL: " + ex);
return false;
}
}
我希望发送给 DBF 的参数数量取决于用户为公司填写的字段数量,例如,如果他们只填写姓名、城镇和邮政编码,则 SendToDBF 将占用 3 @ 987654322@以及ID、Whatfile和QueryType等预定义参数。
有没有一种方法可以让 SendToDBF 采用未指定数量的参数,并用空格填充用户未输入的其余参数?
【问题讨论】:
-
按需构建 SQL 语句。只需自己连接语句。这是非常棘手的代码。
-
为什么不创建一个 List
或创建一个处理字段总数的类,当您将类作为参数传递时,您可以使用 AddWithValue方法正确填写参数.. 并且对于那些为空的分配 string.Empty 作为参数 -
@MethodMan 我会使用
Dictionary<string, object>。 -
Dictionary
也可以,我也用过..也 @CBreeze MessageBox.Show("Error Updating MySQL: " + ex);更改为MessageBox.Show("Error Updating MySQL: " + ex.Message); -
我会使用 C# params 关键字(public bool SendToDBF(params string[] parameters)。插入语句需要在参数数组中的每个项目都有一个“?”。