这是我更新的问题..
当我尝试使用c#在数据库中执行某个sql文件时,我收到错误,如下所示:
我的c#代码就像:
if (comboBox1.SelectedItem.ToString() == "master" && comboBox2.SelectedItem.ToString() == "master.sql")
{
oConnection.Open();
Server server = new Server(new ServerConnection(oConnection));
if (MessageBox.Show("Execute " + comboBox2.SelectedItem.ToString() + " in the database " + comboBox1.SelectedItem.ToString() + " ?", "Execute?", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
var output = server.ConnectionContext.ExecuteNonQuery(@"D:\Testpgm\master.sql");
if (!output.Equals(0))
{
try
{
MessageBox.Show(comboBox2.SelectedItem.ToString() + " executed successfully in " + comboBox1.SelectedItem.ToString() + " database");
}
catch (Exception exc)
{
MessageBox.Show("Script Execution Failed,"+exc);
}
}
}
else
{
MessageBox.Show("Execution cancelled by the user");
}
else
{
MessageBox.Show("Either the database or the sql script file selected is wrong!!");
}
有人能指出为什么会这样吗?我在谷歌上搜索了几乎所有我发现的东西,但不幸的是得到了我的预期......
我也尝试过将绑定重定向添加到我的app.config,因为我可以在c:\ windows \ assembly中找到“microsoft.sqlserver.batchparser.dll”版本10.0.0.0,我的c#应用程序查找版本9.0 .242.0,这似乎并没有起作用。我使用的代码是:
<runtime>
<assemblyBinding xmlns="urn:schemas=microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="microsoft.sqlserver.batchparser" publicKeyToken="89845dcd8080cc91" culture="neutral"/>
<bindingRedirect oldVersion="9.0.242.0" newVersion="10.0.0.0"/>
<publisherPolicy apply="no"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
任何帮助都会非常感激..
答案 0 :(得分:0)
看起来缺少您的引用('Microsoft.SqlServer.BatchParser')。 为了验证这一点,请执行以下操作:
“Microsoft.SqlServer.BatchParser”引用是否以感叹号突出显示?这么想...... 突出显示它并点击F4属性。
在属性中找到路径。我怀疑它是空白的,或者文件确实不存在(如异常所暗示的那样......)
答案 1 :(得分:0)
我能够使用10. *版本的程序集“Microsoft.SqlServer.ConnectionInfo”,“Microsoft.SqlServer.Management.Sdk.Sfc”和“Microsoft.SqlServer.Smo”成功运行代码。尝试下载2008版本的SMO组件,也许这是他们现在修复的错误。
答案 2 :(得分:0)
.Net运行时的不同版本?如果您的应用程序使用.Net4,但是要加载的dll是使用.Net2创建的,则可以在配置部分添加一个条目:
<startup useLegacyV2RuntimeActivationPolicy="true"></startup>
答案 3 :(得分:0)
Atlast我找到了解决方案。刚刚在我的代码中做了一些改变:
if (comboBox1.SelectedItem.ToString() == "master" && comboBox2.SelectedItem.ToString() == "master.sql")
{
oConnection.Open();
***SqlCommand SqlCmd = new SqlCommand();
SqlCmd.CommandText = textentry;
SqlCmd.Connection = oConnection;
var output = SqlCmd.ExecuteNonQuery();***
if (MessageBox.Show("Execute " + comboBox2.SelectedItem.ToString() + " in the database " + comboBox1.SelectedItem.ToString() + " ?", "Execute?", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (!output.Equals(0))
{
try
{
MessageBox.Show(comboBox2.SelectedItem.ToString() + " executed successfully in " + comboBox1.SelectedItem.ToString() + " database");
}
catch (Exception exc)
{
MessageBox.Show("Script Execution Failed,"+exc);
}
}
}
else
{
MessageBox.Show("Execution cancelled by the user");
}
else
{
MessageBox.Show("Either the database or the sql script file selected is wrong!!");
}
答案 4 :(得分:0)
对于寻找此dll并且无法通过相关MS SQL Server功能包安装它的其他人,该DLL位于:
C:\Windows\assembly\GAC_64\Microsoft.SqlServer.BatchParser\
然后在SQL Server版本的子文件夹中。如果您以32位方式运行该流程,则会改为GAC_32
。将文件复制到您的应用程序的bin
文件夹中,应该可以正常运行。