2015-09-04 56 views
0

我想创建一个命令,它应该创建一个基于名称的表在文本框中键入。没有错误,工作,查询看起来不错,但实际上并没有创建表。这是为什么?创建表命令实际上并不创建表c#

private void button1_Click(object sender, EventArgs e) 
{ 
    int count = 0; 

    var connString = (@"Data Source=" + System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)) + @"\Grupe.sdf"); 

    using (var conn = new SqlCeConnection(connString)) 
    { 
     try 
     { 
      conn.Open(); 
      var query = "CREATE TABLE " + textBox1.Text.Trim() + "(" + "Id int NOT NULL IDENTITY (1,1) PRIMARY KEY" ; 
      MessageBox.Show(query); 

      foreach (Control c in this.Controls) 
      { 
       if (c.Name.Contains("temp") && c is TextBox) 
       { 
        if (!String.IsNullOrEmpty(c.Text)) 
        { 
         query += "," + c.Text.Trim() + " nvarchar(MAX) NULL"; 
         count++; 
        } 
       } 
      } 

      query += ")"; 

      var command = new SqlCeCommand(query, conn); 
      command.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 
} 
+2

是否有一个按钮实际连接到处理程序?处理程序是否实际调用?一个_breakpoint_的好地方。 – MickyD

+0

连接到处理程序是什么意思? – Ezekiel

+0

如果在不中断调试会话的情况下单击按钮两次,您是否收到错误消息,指出该表存在? – Steve

回答

0

尝试之前

var command = new SqlCeCommand(query, conn); 

MessageBox.Show(query); 

你一定会找到一个语法错误。代码似乎很好,但我想你必须看到为create table生成的完整查询。

我相信nvarchar是有4000个字符的限制,我无法找到nvarchar是受支持类型的列表。使用ntext在你的代码中工作得很好。

private void button1_Click(object sender, EventArgs e) 
    { 
     int count = 0; 
     var connString = (@"Data Source=Grupe.sdf"); 

     if (!File.Exists("Grupe.sdf")) 
     { 
      SqlCeEngine engine = new SqlCeEngine(connString); 
      engine.CreateDatabase(); 
     } 

     using (var conn = new SqlCeConnection(connString)) 
     { 
      try 
      { 
       conn.Open(); 
       var query = "CREATE TABLE " + textBox1.Text.Trim() + "(" + "Id int NOT NULL IDENTITY (1,1) PRIMARY KEY"; 
       MessageBox.Show(query); 
       foreach (Control c in this.Controls) 
       { 
        if (c.Name.Contains("temp") && c is TextBox) 
        { 
         if (!String.IsNullOrEmpty(c.Text)) 
         { 
          query += "," + c.Text.Trim() + " ntext NULL"; 


          count++; 
         } 
        } 


       } 
       query += ")"; 

       MessageBox.Show(query); 

       var command = new SqlCeCommand(query, conn); 
       command.ExecuteNonQuery(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.ToString()); 
      } 

     } 
    } 
+0

@Ezekiel - 你确定你正在查看正确的数据库,当你说表没有被创建? –

+0

是的。这是肯定的。我已经做了messagebox的事情,没关系。我唯一的问题。 QUERY是这样的:'CREATE TABLE dsa(id int NOT NULL(1,1)PRIMARY KEY'然后没有paranthes。它应该是最后一个paranthes吗? – Ezekiel

+0

CREATE TABLE TEMP(Id int NOT NULL IDENTITY(1, 1)PRIMARY KEY,X nvarchar(MAX)NULL); – 2015-09-04 09:20:23

0

在bin/debug文件夹中查找数据库文件的副本!

+0

数据库文件存在,但其副本不是。 – Ezekiel