2016-09-16 84 views
0

下面是插入的代码 - 我只需要帮助将它转换成更新与值和where子句的语法。正确的MS SQL更新语句语法C#与ADODB.Parameters?

ADODB.Command cmdInsert = new ADODB.Command(); 
cmdInsert.ActiveConnection = conn; 

cmdInsert.CommandText = "INSERT INTO ExchangeTypes(MarketSelectionId) VALUES (?)"; 

//Update statement to be modelled: 
//cmdUpdate.CommandText = "Update ExchangeTypes SET 
//LayOdds = '" & layOdds & "'" & ", 
//Size='" & laySize & "' WHERE 
//MarketId='" & marketid & "'" and SelectionId='" & selectionid & "'" 

cmdInsert.CommandType = ADODB.CommandTypeEnum.adCmdText; 

// Append the parameters 
ADODB.Parameter paramMS = cmdInsert.CreateParameter(
      "MarketSelectionId",       // Parameter name 
      ADODB.DataTypeEnum.adVarChar,    // Parameter type (adVarChar) 
      ADODB.ParameterDirectionEnum.adParamInput, // Parameter direction 
      200,           // Max size 
      umarketiduselectionid);      // Parameter value 

      cmdInsert.Parameters.Append(paramMS); 

      object nRecordsAffected = Type.Missing; 
      object oParams = Type.Missing; 
      cmdInsert.Execute(out nRecordsAffected, ref oParams, 
      (int)ADODB.ExecuteOptionEnum.adExecuteNoRecords); 
+0

这看起来像你开始建立的东西,将疯狂 - 容易受到SQL注入攻击。 –

回答

1

ADODB是古老和过时。它仅用于向前兼容旧vb6时代代码。它应该从不用于新的代码。

试试这个使用ADO.Net您插入代替:

using (var conn As new SqlConnection("connection string here")) 
using (var cmd As new SqlCommand("INSERT INTO ExchangeTypes(MarketSelectionId) VALUES (@MarketSelectionId)", conn) 
{ 
    cmd.Parameters.Add("@MarketSelectionId", SqlDbType.VarChar, 200).Value = umarketiduselectionid; 

    conn.Open(); 
    cmd.ExecuteNonQuery(); 
} 

,然后更新查询应该是这样的:

using (var conn As new SqlConnection("connection string here")) 
using (var cmd As new SqlCommand("Update ExchangeTypes SET LayOdds = @LayOdds, Size = @LaySize WHERE MarketId= @MarketId AND SelectionId = @SelectionID ", conn) 
{ 
    //Guessing at your column types/lengths here 
    cmd.Parameters.Add("@LayOdds", SqlDbType.VarChar, 200).Value = layOdds; 
    cmd.Parameters.Add("@LaySize", SqlDbType.Int).Value = laySize; 
    cmd.Parameters.Add("@MarketId", SqlDbType.Int).Value = marketid; 
    cmd.Parameters.Add("@SelectionId", SqlDbType.Int).Value = selectionid; 

    conn.Open(); 
    cmd.ExecuteNonQuery(); 
} 
+0

非常感谢Joel。 你可以告诉我上次编程的时间是15年前,甚至没有这些技术。 我会根据您的建议更改与ADO.Net的连接。非常感激。 – user6063812

+0

我实际上试图做的是循环遍历一个表,并用ID列表构建一个JSON字符串,并且在每40次迭代后发送JSON请求并处理使用带where子句的更新返回的40个JSON项包含在40个返回的JSON请求中。 并重复读取每40条记录。 我知道我需要2个查询 - 一个只是一个选择不同的循环和另一个更新在哪里。 你可能提供像你已经完成的基本大纲 - 我得到你的代码的语法错误。因此使用ADODB更加熟悉。 – user6063812

+0

你很可能缺少一些导入(例如:system.data,system.data.sqlclient)。 –

1

你卡安更新你的表如下:

语法:MSDN

Update YourTable 
Set Column = Value 
Where Condition 

cmdInsert.CommandText = "Update ExchangeTypes Set MarketSelectionId = VALUE 
Where MarketSelectionId = '?' "; 
+0

谢谢萨米。我得到了它的工作,这是一个很大的进步。然而,看起来我在选择连接方面的经验不足已经暴露,我需要改变为更现代化的选择。 – user6063812