【问题标题】:SQL Compact Edition Insert C#SQL 精简版插入 C#
【发布时间】:2011-03-29 23:54:28
【问题描述】:

我正在尝试将一些值插入到这样的 SQL CE 数据库中,但没有任何反应。我做错了什么?

string strConn = Properties.Settings.Default.SqlConnectionString;
using (SqlCeConnection con = new SqlCeConnection(strConn))
{
    con.Open();
    using (SqlCeCommand cmd = new SqlCeCommand("insert into CustTable(ID, Name) values (@Val1, @val2)", con))
    {
        cmd.Parameters.AddWithValue("@Val1", customer.ID);
        cmd.Parameters.AddWithValue("@Val2", customer.Name);
        cmd.CommandType = System.Data.CommandType.Text;
        cmd.ExecuteNonQuery();
    }
}

【问题讨论】:

  • 如果您可以设法以任何方式将数据输入数据库,请尝试执行 select 语句而不是 insert 语句,以确保您以某种形式与(正确的)数据库通信。
  • 如果我在 SQL Server 管理中执行插入语句,它工作得很好。但它在我的应用程序中不起作用。
  • 所以从你的代码中做一个select语句,看看你的代码是否至少可以读取数据库中的数据,如果不能写入。也许结果会给你一些线索。
  • 看起来您连接到的数据库与您使用 SQL Server Management 看到的数据库不同
  • @BlueMonkMN:从数据库中读取效果非常好。我刚刚测试过。

标签: c# sql visual-studio


【解决方案1】:

您如何“尝试插入一些值...”?您是从 Visual Studio 运行应用程序吗?为什么你认为“什么都没有发生”?您是在运行应用后打开原始 .sdf 文件吗?

在解决方案资源管理器中检查数据库文件的复制文件属性;是“复制”吗?这意味着 Visual Studio 将在您的 bin 文件夹中创建原始数据库文件的副本,并将连接字符串设置为该路径。所有更改都发生在副本上,如果您检查原始文件,它将保持不变。

another SO question也有同样的问题;看看有没有帮助。

【讨论】:

  • 非常感谢。对 bin 文件夹下的数据库副本进行了更改,我正在查看原始表:S
  • 我也有同样的问题,请告诉我在哪里可以找到使用 Visual c# 2010 中的复制属性,请告诉我详细的步骤,谢谢!
  • @user136640;从 VS 的解决方案资源管理器窗口中选择 .sdf 文件,右键单击并选择属性,或选择属性窗口。
  • 好吧,我做到了,并将其更改为在我使用它时不复制它会生成找不到文件的异常 请告诉我如何执行此操作,因为我以更多形式使用此 DB 文件我也想要将我的项目导出到设置文件,所以自己给路径不合适请解决我的问题谢谢!
  • @user136640;为什么将其更改为“请勿复制”?发布问题,或加入 Visual Studio 聊天。
【解决方案2】:

您好像忘了先open 连接 - 试试这个:

    using (SqlCeConnection con = new SqlCeConnection(strConn))
    {
        con.Open();
        using (SqlCeCommand cmd = new SqlCeCommand("insert into CustTable(ID,   Name) values (@Val1, @val2)",con))
        {
            cmd.Parameters.AddWithValue("@Val1", customer.ID);
            cmd.Parameters.AddWithValue("@Val2", customer.Name);
            cmd.CommandType = System.Data.CommandType.Text;
            cmd.ExecuteNonQuery();
        }
    }

【讨论】:

  • 它没有帮助。我没有将值放入我的表中:S
  • 你有例外吗?如果可以,你能展示一下吗?否则 - 您是否正在查看正确的数据库(您的连接字符串指定的数据库)?
  • @Man1:您的代码看起来正确(使用con.Open();)。你有没有抛出任何异常?你确定代码真的在执行吗?
  • 我确定代码正在执行,问题是我根本没有遇到任何异常。当我通过调试它时,我正在查看正确的数据库和所有内容。
  • 也许您还有其他代码删除了这些行?当您使用事务然后不提交它时,这是一个常见问题,但这似乎不是您正在做的事情。
【解决方案3】:

试试这个。

using (SqlCeConnection con = new SqlCeConnection(strConn))
{
    SqlCeParameter par;
    con.Open();
    SqlCeCommand cmd = con.CreateCommand();
    cmd.CommandText = "insert into CustTable(ID, Name) values (@Val1, @val2)";
    // Create the parameters
    par = new SqlCeParameter("@Val1", SqlDbType.Int);
    cmd.Parameters.Add(par); 
    par = new SqlCeParameter("@Val2", SqlDbType.NChar, 50);
    cmd.Parameters.Add(par);
    // Set the values        
    cmd.Parameters["@Val1"].Value = customer.ID;
    cmd.Parameters["@Val2"].Value = customer.Name;
    cmd.ExecuteNonQuery();
    // Dispose
    cmd.Dispose();
}

【讨论】:

    猜你喜欢
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    相关资源
    最近更新 更多