使用sql语句将文本框中的数据直接插入数据表

时间:2013-06-26 00:53:14

标签: c# sql database .net-3.5 datatable

以下新更新

当我运行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

1 个答案:

答案 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)";