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()实现之间可能会产生影响的两个差异。

首先,示例代码调用与您的实现不同的方法insertSQL()。它调用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 语句文本中命名的参数的更多信息,@Parameter0请参阅此 MSDN 页面上的示例代码。

当然,我不知道这是否是您的数据层的实现方式,但这是一个很容易测试的差异。只需更改VALUES子句的文本以匹配示例中使用的参数名称,如下所示:

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