【问题标题】:Create table command doesn't actually create the table c#创建表命令实际上并不创建表 c#
【发布时间】:2015-09-04 08:54:06
【问题描述】:

我正在尝试创建一个命令,该命令应该根据在文本框中输入的名称创建一个表。没有错误,工作正常,查询看起来不错,但实际上并没有创建表。这是为什么呢?

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());
        }
    }
}

【问题讨论】:

  • 是否有一个按钮实际连接到处理程序?处理程序实际上被调用了吗? 断点的好地方。
  • 连接到处理程序是什么意思?
  • 如果您在不中断调试会话的情况下单击按钮两次,您是否会收到一条错误消息,说明该表存在?
  • 如果我按两次它表示该表已经存在。奇怪..但它仍然没有显示在服务器资源管理器中
  • 那么建表所在的数据库不是你想的那个

标签: c# sql sql-server-ce create-table


【解决方案1】:

试一试

    MessageBox.Show(query);

之前

    var command = new SqlCeCommand(query, conn);

您肯定会发现语法错误。代码看起来不错,但我想您必须看到创建表的完整生成查询。

我相信 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());
            }

        }
    }

【讨论】:

  • @Ezekiel - 当您说未创建表时,您确定正在查看正确的数据库吗?
  • 是的。这是肯定的。我已经做了消息框的事情,没关系。我唯一的问题。查询是这样的:CREATE TABLE dsa(id int NOT NULL(1,1) PRIMARY KEY 然后没有括号。应该是决赛中的一个paranthes吗?
  • CREATE TABLE TEMP (Id int NOT NULL IDENTITY (1,1) PRIMARY KEY, X nvarchar(MAX) NULL);
  • 或 CREATE TABLE TEMP (Id int NOT NULL IDENTITY (1,1) PRIMARY KEY);
  • 尝试从代码中“插入临时值('1')”,看看是否可以添加行。如果是,请查看 Steve 的评论
【解决方案2】:

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

【讨论】:

  • 有数据库文件,但没有副本。
猜你喜欢
  • 2018-06-03
  • 2014-11-15
  • 2013-05-25
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2019-09-07
相关资源
最近更新 更多