创建表SQL查询 - 从字符串中选择表名

时间:2014-06-18 22:37:19

标签: c# sql database datatable create-table

我正在尝试以编程方式创建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”是文本框值。

2 个答案:

答案 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))