关于这个社区的所有时间的第二个问题!我是一个菜鸟,我的弱点是if语句或amoungst循环和其他if语句。
所以这是我的情景。此方法将任何内容插入数据库,但我想验证某些内容。我不想在数据库中添加任何内容,而是希望输入的内容以“LIFT”开头,我希望方法跳过该行并继续下一行。有没有办法可以将其编入此方法?或者我需要编写一个新方法?非常感谢!
public bool BatchInsert(string table, string[] values)
{
string statement = "INSERT INTO " + table + " VALUES(";
for (var i = 0; i < values.Length - 1; i++)
{
if(values[i].Contains("'")){
values[i] = values[i].Replace("'", "''");
}
statement += "'"+values[i]+"', ";
}
statement += "'" + values[values.Length - 1] + "');";
SqlCommand comm = new SqlCommand(statement, connectionPCICUSTOM);
try
{
comm.Connection.Open();
comm.ExecuteNonQuery();
}
catch (Exception e)
{
KaplanFTP.errorMsg = "Database error: " + e.Message;
}
finally
{
comm.Connection.Close();
}
return true;
}
答案 0 :(得分:1)
一些提示。不要+ =字符串类型,因为它会降低性能。我也更喜欢foreach循环,因为代码更清晰,更容易阅读/更不容易搞乱索引。同时使用using语句确保正确处理。
假设您有对System.Linq的引用,您可以使用以下内容。我没有测试它,但它应该工作:
public bool BatchInsert(string table, IEnumerable<string> values)
{
var sql = new StringBuilder();
sql.Append("INSERT INTO " + table + " VALUES(");
var newValues = values.Where(x => !x.StartsWith("LIFT")).Select(x => string.Format("'{0}'", x.Replace("'", "''")));
sql.Append(string.Join("","", newValues.ToArray()));
sql.Append(")");
using (var comm = new SqlCommand(statement, connectionPCICUSTOM))
{
try
{
comm.Connection.Open();
comm.ExecuteNonQuery();
}
catch (Exception e)
{
KaplanFTP.errorMsg = "Database error: " + e.Message;
}
finally
{
comm.Connection.Close();
}
}
return true;
}
答案 1 :(得分:0)
如果您的目标是遍历“值”集合,保留以“lift”开头的值及其对应的列不变,则可能需要修改构建INSERT查询的方式。您将根据需要添加列,而不是假设将考虑每个值。基本上,您需要使用以下表单:
INSERT INTO tablename (col1, col2...) VALUES (val1, val2...)
例如:
string statement = "INSERT INTO tablename ";
string columns = "(";
string values = "(";
for (var i = 0; i < values.Length - 1; i++)
{
//if values doesn't contain lift, add it to the statement
if(!values[i].contains("LIFT")){
//columnName is a collection of your db column names
columns += "'"+columnName[i]+"'";
values += "'"+values[i]+"'";
}
}
columns += ")";
values += ")";
statement += columns +" VALUES " + values;
正如一些评论所述,这种方法可以让您进行SQL注入。谨慎使用。
编辑:抱歉,我错过了你说'以'LIFT'开头'的地方。将.contains()行修改为以下内容:
if(!values[i].StartsWith("LIFT")){