gpt4 book ai didi

c# - SQLite 插入语句

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:36 24 4
gpt4 key购买 nike

我创建了以下插入方法,它运行良好,但我知道它可以更有效。有人可以告诉我如何转换此方法以使用参数和/或提高其效率吗?

public static void SQLiteTableINSERT(string tableName)
{
int colCount = 0;
using (SQLiteConnection Conn = new SQLiteConnection(SQLiteConn.Conn))
{
using (SQLiteTransaction sqliteTrans = Conn.BeginTransaction())
{
using (SQLiteCommand cmd = Conn.CreateCommand())
{
DataTableColumnNames();

string query = "INSERT INTO " + tableName + "(";

foreach (string name in DtColumns)
{
query += "[" + name + "]";
++colCount;

if (colCount < DtColumns.Count())
query += ",";
}

query += ")";
query += " VALUES(";

for (int i = 0; i < LocalDataSet.LocalDs.Tables[0].Rows.Count; ++i)
{
cmd.CommandText = query;

foreach (DataColumn col in LocalDataSet.LocalDs.Tables[0].Columns)
{
string temp = LocalDataSet.LocalDs.Tables[0].Rows[i][col, DataRowVersion.Current].ToString();

if (temp == "True")
cmd.CommandText += 1;

else if (temp == "")
cmd.CommandText += 0;

if (temp != "True" && temp != "")
cmd.CommandText += "'" +temp + "'";

cmd.CommandText += ",";
}

cmd.CommandText = cmd.CommandText.Remove(cmd.CommandText.LastIndexOf(","));

cmd.CommandText += ")";

cmd.ExecuteNonQuery();
}
}

sqliteTrans.Commit();
}

}
}

最佳答案

您真的应该将其切换为使用准备好的语句,然后将数据绑定(bind)到准备好的语句中的参数。这里解释了 C/C++ 的基础知识:

http://www.sqlite.org/cintro.html

我怀疑您使用的是 dotConnect,因此您可能希望针对您的具体示例引用此内容:

http://www.devart.com/dotconnect/sqlite/docs/Parameters.html

同样的原则适用。您将 SQL 编写为单个字符串常量,以便在源代码中阅读、查看和修改。然后将该 SQL 命令连同一组数据元素发送到 SQLite,以替换每个参数。这种技术使您的代码更清晰,并有助于避免 SQL 注入(inject)攻击或混淆。

关于c# - SQLite 插入语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com