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

C# 使用sql语句将文本框中的数据直接插入数据表,c#,sql,database,.net-3.5,datatable,C#,Sql,Database,.net 3.5,Datatable,下面的新更新 运行insertSQL()时,我的insert语句未执行 我不确定是否正确传递了参数。在我的研究中,我发现SQL命令被广泛用于传递参数,但这是我应该采用的方法 这是我的更新代码: 表单frmProcessLayout--> 这就是我所看到的,作为我应该做什么的参考,但它是在VisualBasic中 Function addRow(ByVal fax As String, ByVal scan As String, ByVal backup As String) D

下面的新更新

运行insertSQL()时,我的insert语句未执行 我不确定是否正确传递了参数。在我的研究中,我发现SQL命令被广泛用于传递参数,但这是我应该采用的方法

这是我的更新代码: 表单frmProcessLayout-->

这就是我所看到的,作为我应该做什么的参考,但它是在VisualBasic中

 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

我可以看到您的示例代码和您自己的
insertSQL()
实现之间的两个差异,这可能会有所不同

首先,示例代码调用的方法与
insertSQL()
的实现不同。它调用
executenselectsql()
,您的代码调用
ExecuteSelectSQL()
。仅根据名称,我猜其中一个用于返回结果集,而另一个不是。我不知道这是否会影响
INSERT
语句的执行,但这可能值得研究

其次,SQL语句中的参数名称不同。如果您的数据层代码按名称引用参数,那么它可能还希望这些参数具有某种命名约定,这似乎是合理的

示例代码使用单词“parameter”的单数形式,例如
@Parameter0
,如下所示:

ssql = "INSERT INTO [ServiceStation].[dbo].[OnBaseSweepFaxPath] ([FaxLine],[FaxSweepPath] ,[FaxBackupPath])"
ssql += "VALUES(@Parameter0, @Parameter1, @Parameter2)"
sSql = "INSERT INTO [ServiceStation].[dbo].[ProcessLayout] ([ProcessName], [ProcessingLevel], [Department], [FormName]) VALUES (@parameters0, @parameters1, @parameters2, @parameters3)";
而您的代码使用了单词“parameter”的复数形式,例如
@parameters 0
(注意额外的“s”),如下所示:

ssql = "INSERT INTO [ServiceStation].[dbo].[OnBaseSweepFaxPath] ([FaxLine],[FaxSweepPath] ,[FaxBackupPath])"
ssql += "VALUES(@Parameter0, @Parameter1, @Parameter2)"
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];
    //...
}

我已经编辑了你的标题。请看,“,其中的共识是“不,他们不应该”。谢谢约翰,我错了。约翰,你对这个问题有什么建议吗?你的确切问题是什么
dt==null
在InsertSQL中不是问题,因为它的值从未使用过。若并没有其他问题,那个么很可能只是看到了调试器和代码优化的工件。就
dt
而言,该代码也可以是
DataTable dt=null。经过多次修改后,数据库中没有插入任何内容,我不知道如何将值发送到参数valuesMatt,谢谢您的回复。我已经更新了我的帖子,包括我今天所做的事情。正如您所指出的,我注意到的一件事是,我没有使用
ExecuteOnSelectSQL()
,我将参数更改为
@Parameter[0]
等等。。。我已经添加了一个异常,当我在oDb.ExecuteNonSelectSQL(sSql,parameters)上通过一些断点时,会抛出这个异常;该图像没有显示,因此我添加了引发异常的DBAccess中的代码,并可能对参数有更深入的了解这肯定是我在Insert中命名参数的方式。。。我拆下了支架。。参数0,参数1,。。。现在它可以工作了。