1

以下の新しい更新

insertSQL() を実行しても挿入ステートメントが実行されません。パラメーターを正しく渡しているかどうかわかりません。私の調査では、SQL コマンドがパラメーターを渡すために広く使用されていることがわかりましたが、これが私が想定している方法です。

これは私の更新されたコードです: FORM frmProcessLayout -->

  public void insertSQL( string processName, string processingLevel, string department, string formName)
    {

        string[] parameters = new string[4];



        sSql = "INSERT INTO [ServiceStation].[dbo].[ProcessLayout] ([ProcessName], [ProcessingLevel], [Department], [FormName]) VALUES(@Parameter[0], @Parameter[1], @Parameter[2], @Parameter[3])";

        parameters[0] = processName;
        parameters[1] = processingLevel;
        parameters[2] = department;
        parameters[3] = formName;
        ssDBAccess.DBAccess oDb = new ssDBAccess.DBAccess();
        oDb.SetConnection();
        oDb.ExecuteNonSelectSQL(sSql, parameters);



    }

そして、これは私が何をすべきかの参考として私が見ているものですが、それはVisual Basicにあります

 Function addRow(ByVal fax As String, ByVal scan As String, ByVal backup As String)
        Dim parameters(2) As String
        Addrow = Nothing
        ssql = "INSERT INTO [ServiceStation].[dbo].[OnBaseSweepFaxPath] ([FaxLine],[FaxSweepPath] ,[FaxBackupPath])"
        ssql += "VALUES(@Parameter0, @Parameter1, @Parameter2)"
        parameters(0) = fax
        parameters(1) = scan
        parameters(2) = backup

        odb.ExecuteNonSelectSQL(ssql, parameters)
    End Function
4

1 に答える 1

0

あなたのサンプル コードと独自のinsertSQL()実装との間には、違いを生む可能性のある 2 つの違いがあることがわかります。

まず、サンプル コードは、実装した とは異なるメソッドを呼び出しますinsertSQL()。It が呼び出さExecuteNonSelectSQL()れ、コードが を呼び出しますExecuteSelectSQL()。名前だけに基づいて、一方は結果セットを返すことを意図しており、もう一方はそうではないと思います。それがあなたの声明の実行に影響するかどうかはわかりませんがINSERT、調査する価値があるかもしれません.

次に、SQL ステートメントのパラメーター名が異なります。データ層のコードがパラメーターを名前で参照している場合、それらのパラメーターに対して特定の命名規則も想定している可能性があります。

サンプル コードでは、「パラメータ」という単語の単数形を使用しています。たとえば@Parameter0、次のようになります。

ssql = "INSERT INTO [ServiceStation].[dbo].[OnBaseSweepFaxPath] ([FaxLine],[FaxSweepPath] ,[FaxBackupPath])"
ssql += "VALUES(@Parameter0, @Parameter1, @Parameter2)"

あなたのコードでは、「パラメータ」という単語の複数形を使用していましたが、たとえば、@parameters0次のように (余分な「s」に注意してください):

sSql = "INSERT INTO [ServiceStation].[dbo].[ProcessLayout] ([ProcessName], [ProcessingLevel], [Department], [FormName]) VALUES (@parameters0, @parameters1, @parameters2, @parameters3)";

データ層が配列内の要素数に基づいてパラメーター名を生成しているparameters場合、if には次のようなコードが含まれる可能性があります。

string ParameterName;

for (int i = 0; i < parameters.Length; i++)
{
    ParameterName = "@Parameter" + i.ToString();
    //...
    command.Parameters[ParameterName].Value = parameters[0];
    //...
}

渡した SQL ステートメントが、使用しようとしているものの@parameters0代わりに名前を指定する必要があるため、これは失敗します。SQL ステートメントのテキストで指定されたパラメーターをコードで参照する方法の詳細については、この MSDN ページ@Parameter0のサンプル コードを参照してください。

もちろん、それがデータ層の実装方法であるかどうかはわかりませんが、テストするのは簡単な違いです。VALUES次のように、例で使用されているパラメーター名と一致するように句のテキストを変更するだけです。

sSql = "INSERT INTO [ServiceStation].[dbo].[ProcessLayout] ([ProcessName], [ProcessingLevel], [Department], [FormName]) VALUES (@Parameter0, @Parameter1, @Parameter2, @Parameter3)";
于 2013-07-01T18:16:12.293 に答える