在app.get('/jquery/jquery.js', function(req, res) {
res.sendfile(__dirname + '/node_modules/jquery/dist/jquery.min.js');
});
程序中,我试图将参数添加到我在远程服务器(plex)上创建的存储过程的SQL语句中。
ShippedContainerSettlement
当我使用参数public void checkGradedSerials()
{
localTable = "Graded_Serials";
List<string> gradedHides = new List<string>();
string queryString = "call sproc164407_2053096_650214('@startDate', '" + endDate + "');";
OdbcDataAdapter adapter = new OdbcDataAdapter();
OdbcCommand command = new OdbcCommand(queryString, connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@startDate", startDate);
adapter.SelectCommand = command;
connection.Open();
while (rowsCollected == false)
{
if (retries <= 5)
{
try
{
DataTable table = new DataTable();
adapter.Fill(table);
并为其赋值时,会引发错误。但是,当我运行程序,并为endDate添加参数时,它运行正常吗?
我得到的错误是:
任何想法我做错了。
修改 我已经纳入了下面提到的一些变化。这是我使用的代码。
@startDate
但是,当我收到此错误时,它似乎没有收到我发送的参数。
这是我正在使用的存储过程。这可能看起来很奇怪,但请记住,当我只是将一个字符串传递给select命令时,这是有效的(参见上面第一个代码示例中的endDate)。
public void checkGradedSerials()
{
localTable = "Graded_Serials";
List<string> gradedHides = new List<string>();
OdbcCommand command = new OdbcCommand("sproc164407_2053096_650214", odbcConnection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@startDate", startDate);
command.Parameters.AddWithValue("@endDate", endDate);
OdbcDataAdapter adapter = new OdbcDataAdapter();
adapter.SelectCommand = command;
odbcConnection.Open();
while (rowsCollected == false)
{
if (retries <= 5)
{
try
{
DataTable table = new DataTable();
adapter.Fill(table);
并在此处添加参数:
答案 0 :(得分:1)
您应该使用System.Data.SqlClient
。您可以显式声明要发送的参数的数据类型......如下所示:
SqlConnection cn;
cn = new SqlConnection(ConnectionString);
SqlCommand cmd;
cmd = new SqlCommand("sproc164407_2053096_650214", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@startDate", SqlDbType.DateTime);
cmd.Parameters["@startDate"].Value = startDate;
cmd.Parameters.Add("@enddate", SqlDbType.VarChar);
cmd.Parameters["@enddate"].Value = enddate;
如果必须使用ODBC,则必须使用ODBC CALL语法,该语法不支持命名参数。因此,请将queryString
行更改为:
string queryString = "{call sproc164407_2053096_650214 (?, ?)}";
然后您可以添加参数:
command.Parameters.Add("@startDate", OdbcType.DateTime).Value=startDate;
command.Parameters.Add("@endDate", OdbcType.DateTime).Value=endDate;
答案 1 :(得分:1)
使用SqlCommand而不是odbc。
只需将存储的proc名称放在CommandText中,而不是SQL语句来执行它。添加参数值意味着适配器将以正确的格式传递参数。您不需要在CommandText中执行字符串操作。
如果您需要使用OdbcCommand,请参阅this answer,表明您需要使用?
语法作为参数,因此可能会将CommandText更改为包含'call'或'exec'命令和参数占位符,然后确保以正确的顺序AddWithValue
参数