我有一个使用 SQLite 作为数据库的 C# winforms 应用程序,其中有几个表。
该应用程序有一个datagridview
表示来自数据库的数据的控件。
我希望用户能够更改数据库表字段,这很容易通过使用 SQL `ALTER 查询。
当用户想要向数据库表中插入一些数据时会出现问题,因为我需要知道表的字段名称才能构造有效的INSERT
查询。
我通常只是硬编码字段名称,因为我从来没有允许用户更改数据库中表的字段名称的选项。
我的想法是我的INSERT
查询使用datagridview
' 的列名,因此,当用户更改表的字段名称时,它也会更改网格的字段名称,并且每次应用程序运行时,网格的列都被命名为与数据库表相同的名称.
这样我总是可以访问正确的字段名称。
或者我可以只使用索引而不是字符串来引用字段吗?
通常我使用此代码插入数据。
class SQLiteDatabase
{
//...
public bool Insert(String tableName, Dictionary<String, String> data)
{
String columns = "";
String values = "";
Boolean returnCode = true;
foreach (KeyValuePair<String, String> val in data)
{
columns += String.Format(" {0},", val.Key.ToString());
values += String.Format(" '{0}',", val.Value);
}
columns = columns.Substring(0, columns.Length - 1);
values = values.Substring(0, values.Length - 1);
try
{
this.ExecuteNonQuery(String.Format("insert into {0}({1}) values({2});", tableName, columns, values));
}
catch(Exception fail)
{
MessageBox.Show(fail.Message);
returnCode = false;
}
return returnCode;
}
//...
}
db = new SQLiteDatabase();
Dictionary<String, String> myData = new Dictionary<String, String>();
myData.Add("NAME", "something");
myData.Add("LAST_NAME", "something");
try
{
db.Insert("TABLE_NAME", myData);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
编辑:我刚刚读到,在 SQLite 中,无法重命名列、删除列或从表中添加或删除约束.... WTF?这是重命名列的解决方案...