以下新更新
当我运行insertSQL()时,我的insert语句没有执行 我不确定我是否正确传递参数。在我的研究中,我看到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
答案 0 :(得分:0)
我可以看到您的示例代码与您自己的insertSQL()
实现之间存在两个可能会有所不同的差异。
首先,示例代码调用的方法与insertSQL()
的实现不同。它会调用ExecuteNonSelectSQL()
,您的代码会调用ExecuteSelectSQL()
。只是根据名称,我猜一个是打算返回结果集而另一个不是。我不知道这是否会影响你INSERT
陈述的执行,但是可能值得调查。
其次,SQL语句中的参数名称是不同的。如果您的数据层代码是按名称引用参数,那么它可能也期望这些参数的某种命名约定似乎是合理的。
您的示例代码使用单词“parameter”的单数形式,例如@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
数组中的元素数生成参数名称,那么可能包含如下代码:
string ParameterName;
for (int i = 0; i < parameters.Length; i++)
{
ParameterName = "@Parameter" + i.ToString();
//...
command.Parameters[ParameterName].Value = parameters[0];
//...
}
哪个会失败,因为你传递给它的SQL语句说名称应该是@parameters0
而不是@Parameter0
,这正是它试图使用的。
有关如何在代码中引用SQL语句文本中指定的参数的详细信息,请参阅this MSDN page上的示例代码。
当然我不知道你的数据层是如何实现的,但是它的差异很容易测试。只需更改VALUES
子句的文本以匹配示例中使用的参数名称,如下所示:
sSql = "INSERT INTO [ServiceStation].[dbo].[ProcessLayout] ([ProcessName], [ProcessingLevel], [Department], [FormName]) VALUES (@Parameter0, @Parameter1, @Parameter2, @Parameter3)";