0

これは私の更新された質問です..

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!!");
    }

なぜこれが起こるのか誰でも指摘できますか?グーグルで見つけたほとんどすべてのことを試しましたが、期待したものを得ることができませんでした..

c:\windows\assembly 内で "microsoft.sqlserver.batchparser.dll" のバージョンが 10.0.0.0 であることがわかり、c# アプリケーションがバージョン 9.0.242.0 を検索するため、app.config にバインディング リダイレクトを追加することも試みました。これも機能していないようです。私が使用したコードは次のとおりです。

<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>

どんな助けでも本当に感謝しています..

4

5 に答える 5

0

最後に、その解決策を見つけました。次のようにコードを変更しました。

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!!");
}
于 2013-08-20T06:53:13.473 に答える
0

この dll を探していて、関連する MS SQL Server Feature Pack を介してインストールできない場合、dll は次の場所にあります。

C:\Windows\assembly\GAC_64\Microsoft.SqlServer.BatchParser\

次に、SQL Server のバージョンのサブフォルダーにあります。プロセスを 32 ビットとして実行している場合は、GAC_32代わりに含まれます。ファイルをアプリケーションのbinフォルダーにコピーすると、動作するはずです。

于 2014-04-20T09:26:38.563 に答える
0

10.* バージョンのアセンブリ "Microsoft.SqlServer.ConnectionInfo"、"Microsoft.SqlServer.Management.Sdk.Sfc"、および "Microsoft.SqlServer.Smo" を使用して、コードを正常に実行できました。SMO コンポーネントの 2008 バージョンをダウンロードしてみてください。おそらく、現在修正されているバグでした。

于 2013-08-19T08:43:00.540 に答える