【问题标题】:sql only creates one tablesql只创建一张表
【发布时间】:2013-10-16 07:01:31
【问题描述】:

我有一段代码专门用于创建几个表,但它创建了第一个表然后抛出异常,但异常不包含任何内容,它是空白的。这是我的代码:

string connectionString = "DataSource=\"EventControl.sdf\"";
        SqlCeEngine en = new SqlCeEngine(connectionString);
        en.CreateDatabase();
        string createTable = "CREATE TABLE Login (userName nvarchar(50), UserType nvarchar(10), Salt nvarchar(100), Hash nvarchar(100))";
        string connection = "Data Source =\"EventControl.sdf\"";
        SqlCeConnection connexion = new SqlCeConnection(connection);
        SqlCeCommand table = new SqlCeCommand(createTable, connexion);
        try
        {
            connexion.Open();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        table.ExecuteNonQuery();
        connexion.Close();
        string createTable1 = "CREATE TABLE Logs (LogNo nvarchar(5), LoggedBy nvarchar(20), DateAndTime nvarchar(20), Callsign nvarchar(20), Category nvarchar(20), SubCategory nvarchar(20), Escalated nvarchar(15), Summary nvarchar(MAX), Complete nvarchar(10))";
        string connection1 = "Data Source =\"EventControl.sdf\"";
        SqlCeConnection connexion1 = new SqlCeConnection(connection1);
        SqlCeCommand table1 = new SqlCeCommand(createTable1, connexion1);
        try
        {
            connexion1.Open();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        table1.ExecuteNonQuery();
        connexion1.Close();
        string createTable2 = "CREATE TABLE Sites (SiteName nvarchar(100),SiteAddress nvarchar(100),PersonInCharge nvarchar(100))";
        string connection2 = "Data Source =\"EventControl.sdf\"";
        SqlCeConnection connexion2 = new SqlCeConnection(connection2);
        SqlCeCommand table2 = new SqlCeCommand(createTable2, connexion2);
        try
        {
            connexion2.Open();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        table2.ExecuteNonQuery();
        connexion2.Close();
        string createTable3 = "CREATE TABLE Categories (Category nvarchar(50), SubCategory nvarchar(50))";
        string connection3 = "Data Source =\"EventControl.sdf\"";
        SqlCeConnection connexion3 = new SqlCeConnection(connection3);
        SqlCeCommand table3 = new SqlCeCommand(createTable3, connexion3);
        try
        {
            connexion3.Open();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        table3.ExecuteNonQuery();
        connexion3.Close();
        string createTable4 = "CREATE TABLE Callsigns (StaffName nvarchar (50), Callsign nvarchar(50))";
        string connection4 = "Data Source =\"EventControl.sdf\"";
        SqlCeConnection connexion4 = new SqlCeConnection(connection4);
        SqlCeCommand table4 = new SqlCeCommand(createTable4, connexion4);
        try
        {
            connexion4.Open();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        table4.ExecuteNonQuery();
        connexion4.Close();
        string createTable5 = "CREATE TABLE Events (EventName nvarchar(100), EventLocation nvarchar(100), PersonInCharge nvarchar(100))";
        string connection5 = "Data Source =\"EventControl.sdf\"";
        SqlCeConnection connexion5 = new SqlCeConnection(connection5);
        SqlCeCommand table5 = new SqlCeCommand(createTable5, connexion5);
        try
        {
            connexion5.Open();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        table5.ExecuteNonQuery();
        connexion5.Close();

它到达 table1.ExecuteNonQuery 然后停止。谁能帮忙??

PS 在有人说为什么不在 VS 中创建数据库之前,这是因为我已经尝试过了,而且它们在我的计算机上运行良好,但是当我创建用于部署的安装文件时,文件夹变得一团糟,程序不会识别数据库了

【问题讨论】:

  • 任何错误信息?您是否在单步执行代码时运行了 SQL Profiler?当你说“停止”时是什么意思 - 就像代码控制停止,应用程序崩溃?
  • SQL 事件探查器?没听说过,不过听起来很有用。它不会冻结,它只是停留在那条线上并打开应该在说完所有内容后打开的表单
  • 不幸的是 out of luck,我的建议是把 table1.ExecuteNonQuery(); 放在 Try-Catch 中,看看它是否弹出提示。祝你好运!
  • "解析查询时出错。[Token line number = 1,Token line offset = 201,Token in error = MAX] ???
  • 完成。将最大值更改为 400 :)

标签: c# sql winforms sql-server-ce


【解决方案1】:
SqlCeEngine engine = new SqlCeEngine("Data Source = AdventureWorks.sdf");
engine.Compact(null);
//you need add a user and a password to acess the database 
engine.Compact("Data Source=; Password =a@3!7f$dQ;");

http://msdn.microsoft.com/pt-br/library/system.data.sqlserverce.sqlceengine.compact(v=vs.100).aspx http://msdn.microsoft.com/en-us/library/tk883fc7(v=vs.100).aspx

【讨论】:

    【解决方案2】:

    将table1中的MAX值改为4000

    【讨论】:

    • 你能评论一下为什么这有效吗?当系统允许时,请接受您自己的答案
    【解决方案3】:

    SQl Server Compact 不支持数据类型 nvarchar(MAX),请改用 ntext:

    Summary ntext,
    

    【讨论】:

      猜你喜欢
      • 2016-03-18
      • 1970-01-01
      • 2015-01-05
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      相关资源
      最近更新 更多