无法附加自动命名的数据库

时间:2014-05-17 08:06:11

标签: c# database connection sdf

所以我有一个C#软件会将数据保存到我的数据库中,但每次运行我的程序并尝试保存数据时都会收到此消息,请帮忙吗?

enter image description here

try
{
    SqlConnection cnn = new SqlConnection(@"Data  Source=.\SQLEXPRESS;
        AttachDbFilename=C:\Users\Hp\Documents\Visual Studio 2010\Projects\Bank_System\Bank_System\Bank_System.sdf;
        Integrated Security=True;User Instance=True");
    cnn.Open();
    SqlCommand cmd1 = 
       new SqlCommand("insert into user values('" + 
           textBox6.Text + "','" + textBox1.Text + "','" + textBox4.Text + "'," + 
           textBox3.Text + ",'" + textBox2.Text +  "','" + textBox5.Text + "')",
           cnn);
    SqlDataReader dr1 = cmd1.ExecuteReader();
    dr1.Close();
    MessageBox.Show(" Record inserted ", " information inserted");
    cnn.Close();
}
catch (SqlException ex)
{
    MessageBox.Show(ex.Message);
}

2 个答案:

答案 0 :(得分:0)

将数据库Bank_System.sdf复制到\ bin \ debug \文件夹中并更改连接字符串,如下所示:

SqlConnection cnn = new SqlConnection("Data Source=" +@".\SQLEXPRESS;
            AttachDbFilename=Bank_System.sdf;
            Integrated Security=True;User Instance=True");

应该可以工作,如果发生错误,请尝试从位于\ bin \ debug \ folder

中的yourapp.exe执行您的应用程序

答案 1 :(得分:0)

您正在使用SDF文件。此文件适用于SQL Server Compact而不适用于SQL Server Express(或完整版)。

在这种情况下,连接字符串应该是:

 @"Data Source=<fullpath_and file_to_your_sdf_file>;Persist Security Info=False;"

请注意,在C#中,您需要在包含特殊字符(如反斜杠)的字符串前面添加逐字符

使用Sql Server Compact需要安装Microsoft Downloads所需的库并使用正确的类。因此,删除SqlConnection和SqlCommand类并使用SqlCeConnection和SqlCeCommand(依此类推,以用于您应用程序中使用的其他数据客户端类)。

当然,SqlCeConnection类可以理解这种不同的连接字符串语法,并允许使用SDF文件

说,请修改构建sql命令的代码。像代码一样使用字符串连接是一个安全的错误配方。从解析错误(字符串中的引号将破坏语法)到更严重的错误,如Sql Injections

这可能是一种使用参数化查询的方法....

try
{
    string cmdText = "insert into user values(@p1, @p2, @p3,@p4,@p5,@p6)";
    using(SqlCeConnection cnn = new SqlCeConnection(@"Data Source=C:\Users\Hp\Documents\Visual Studio 2010\Projects\Bank_System\Bank_System\Bank_System.sdf;Integrated Security=True"))
    using(SqlCeCommand cmd1 = new SqlCeCommand(cmdText, cnn))
    {
        cnn.Open();
        cmd.Parameters.AddWithValue("@p1", textBox6.Text);
        cmd.Parameters.AddWithValue("@p2", textBox1.Text);
        cmd.Parameters.AddWithValue("@p3", textBox4.Text);
        cmd.Parameters.AddWithValue("@p4", textBox3.Text);
        cmd.Parameters.AddWithValue("@p5", textBox2.Text);
        cmd.Parameters.AddWithValue("@p6", textBox5.Text);
        cmd1.ExecuteNonQuery();
        MessageBox.Show(" Record inserted ", " information inserted");
     }
}
catch (SqlException ex)
{
    MessageBox.Show(ex.Message);
}