Ahm*_*mad 3 c# database sqlcommand mdf executenonquery
我正在使用基于WinForms的C#工具,该工具具有附加的基于MDF文件的数据库.我正在尝试使用该SqlCommand.ExecuteNonQuery()方法将记录保存到此附加的MDF数据库,但记录未保存.没有错误或异常发生; 唯一的问题是记录实际上没有保存.
我Console.WriteLine在顶部显示了我正在尝试运行的查询.它的语法正确,如果我从输出窗口复制粘贴并单独运行它,它的工作原理.
我已正确定义连接字符串如下,它可以正常获取记录:
public static String connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\TestBuildDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
这里我用来保存记录的功能:
public static void PerformDBWriteTransaction(string inputSQLStatement)
{
Console.WriteLine(inputSQLStatement);
DataTable returnDataTable = new DataTable();
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString = connectionString;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.CommandType = CommandType.Text;
cmd.CommandText = inputSQLStatement;
cmd.Connection.Open();
try
{
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
errorMessages.Clear();
errorMessages.Append("The following errors were found in the SQL statement:\n\n");
for (int i = 0; i < ex.Errors.Count; i++)
{
errorMessages.Append("Index #" + i + "\n" +
"Message: " + ex.Errors[i].Message + "\n" +
"LineNumber: " + ex.Errors[i].LineNumber + "\n" +
"Source: " + ex.Errors[i].Source + "\n" +
"Procedure: " + ex.Errors[i].Procedure + "\n");
}
MessageBox.Show(errorMessages.ToString());
}
finally
{
cmd.Connection.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
有人能告诉我可能是什么问题吗?我需要以某种方式执行"提交"吗?
编辑:
我发现了问题,并在下面写了一个解决方案..感谢所有帮助过我的人:)
我发现了问题!这很简单,真的很愚蠢:) ..上面的代码都是正确的..是的,人们指出了优化等,但仍然上面的代码是正确的.
问题是,当我将TestDB.MDF文件导入到我的Visual 2010项目中时,它的副本是在项目文件夹中创建的.当您运行/调试程序时,将生成此文件的另一个副本,并将其放在\ bin\Debug \文件夹中.在我使用的连接字符串中,我提到过:AttachDbFilename=|DataDirectory|\TestBuildDB.mdf..这意味着对bin\Debug文件夹中的副本进行了所有读/写操作.但是,我正在调查TestDB.MDF文件以验证是否插入了记录,该文件位于项目的文件夹中!所以基本上,有两个MDF文件,我正在将记录写入一个文件,但是试图在另一个文件中找到它们:)
当您将MDF文件添加到VS2010项目中时,默认情况下VS2010会与该MDF文件建立连接,您可以从该文件中浏览该MDF文件中的内容.用于此目的的MDF文件是放置在项目文件夹中的文件,而不是bin\Debug \文件夹中的那个.就像我之前说的,我的代码使用了bin\Debug文件夹中的那个:)
所以我现在所做的就是从项目中删除了Test.MDF文件引用,删除了项目文件夹中的副本.但是,我在bin\Debug \文件夹中有一个TestDB.MDF文件的副本,我从我的应用程序中连接到该文件夹.如果我想在项目之外浏览MDf文件,我使用SQL Management Studio.这里唯一的问题是MDF文件只能在给定时间由一个程序使用.因此,如果我必须将它与我的应用程序一起使用,我必须从SQL Management studio脱机,反之亦然!
我希望这个解释有助于那里的人:)