我正在尝试以编程方式创建SQL表。我可以用查询创建一个表,这根本不是问题。但我希望表名与插入其中的数据有一定的相关性,因为它用于报价和发票。从DataGridView输入的数据将被插入其中(可能通过批量复制或类似的东西)。
using (SqlCeCommand command = new SqlCeCommand(
"CREATE TABLE table1' (Weight INT, Name NVARCHAR, Breed NVARCHAR)", con))
完美无缺。但是我希望这段代码可以工作:
using (SqlCeConnection con = new SqlCeConnection(@"Data Source=|DataDirectory|\LWADataBase.sdf"))
{
con.Open();
try
{
string tableName = "" + quotenameTxt.Text + "-" +firstTxt.Text+ "-" + surenameTxt.Text;
using (SqlCeCommand command = new SqlCeCommand(
"CREATE TABLE '"+tableName.ToString()+"' (Weight INT, Name NVARCHAR, Breed NVARCHAR)", con))
{
command.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
有什么建议吗?我得到一个错误(如预期的那样)但不确定我需要做什么。
我正在使用SqlCe(之前有人说“不支持BulkCopy”,我知道,我有一个允许它的引用)
我得到的错误是:
解析查询时出错。 [令牌行号= 1,令牌行偏移= 16,令牌错误= 1-2-3]
//“1-2-3”是文本框值。
答案 0 :(得分:3)
使用[方括号]
将短划线更改为下划线或用整个表名括起来答案 1 :(得分:2)
正如上面评论中提到的,进行以下更改:
using (SqlCeCommand command = new SqlCeCommand(
"CREATE TABLE '"+tableName+"' (Weight INT, Name NVARCHAR, Breed NVARCHAR)", con))
tableName
已经是一个字符串。无需使用.ToString()
。
此外,您在tableName
:
string tableName = "" + quotenameTxt.Text + "-" + firstTxt.Text + "-"
+ surenameTxt.Text;
这使得字符串“1-2-3”,而不是您期望的“1-2-3”。
最后,使用tableName
围绕[]
以使其正常工作:
using (SqlCeCommand command = new SqlCeCommand(
"CREATE TABLE '[" + tableName + "]' (Weight INT, Name NVARCHAR, Breed NVARCHAR)", con))