我有一个C#winforms应用程序,SQLite作为数据库,有几个表。
应用程序有一个datagridview
控件,表示来自数据库的数据。
我希望用户能够更改数据库表字段,这很容易使用SQL`ALTER查询。
当用户想要将一些数据插入数据库表时会出现问题,因为我需要知道表的字段名称才能构造有效的INSERT
查询。
我通常只是对字段名称进行硬编码,因为我从未有过允许用户在数据库中更改表格字段名称的选项。
我的想法是我的INSERT
查询使用datagridview
的列名,因此,当用户更改表的字段名称时,它还会更改网格的字段名称,并且每次应用程序运行时,grid的列被命名为与数据库表相同的名称。
这样我总能访问正确的字段名称。
或者我可以只使用索引而不是字符串来引用字段吗?
通常我使用此代码插入数据。
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? 这是重命名列的解决方案......