C#用例中的ADODB连接与SqlConnection



我正在尝试将一个旧项目(最初是用VB6编写的(转换为C#。我看到了以下代码片段(大致(:

Dim  sSql     As String
Dim adoRs     As ADODB.Recordset
sSql = "EXEC " & PROC_GETEPORTPARAMETERVALUES & " " & iTemplateId & ", " & iViewId & ", " & 
g_sTenantSN
Set adoRs = Nothing
' Execute the query
Set adoRs = m_odbcDVConnection.OpenRecordSet(sSql, App.EXEName, Me.Name, csPROC_NAME)
If (adoRs.RecordCount > 0) Then
Do Until (adoRs.EOF)
'Some conditional statements within this block
Loop
End If

在网上做了一些研究之后,我想出了下面的C#代码转换。我在这里使用了SqlConnection。尽管我发现ADODB也可以用于C#。但不确定该用哪一个。

sSql = "EXEC " + PROC_GETEPORTPARAMETERVALUES + " " + iTemplateId + ", " + iViewId + ", " + 
GlobalHelper.Tenant;
SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
SqlCommand cmd = new SqlCommand(sSql);
cmd.CommandType = CommandType.Text;
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
// Conditional statements
}

我不完全确定上述是否恰当。但更重要的是,我想知道什么时候使用ADODB连接,什么时候对C#项目使用SqlConnection。

根据我的理解,在上述情况下,我认为进程执行SQL命令和读取记录。

ADODB通常不在C#中使用。您应该始终使用SqlClient。

您的转换代码有很多问题:

  • 您缺少using
  • 不需要也不应该注入参数。使用SqlParameter正确传递
  • 您还应该使用CommandType.StoredProcedure,并且命令文本只是过程名称。如果您想使用Text,它是默认值,无需设置
  • 如果连接没有打开,检查是没有意义的,当然它不是你刚刚创建的
using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]))
using (SqlCommand cmd = new SqlCommand(PROC_GETEPORTPARAMETERVALUES))
{
cmd.CommandType = CommandType.StoredProcedure;
// Specify correct parameter type, add parameter length for strings
cmd.Parameters.Add("@iTemplateId", SqlDbType.NOT_SURE_WHAT_YOU_WANT_HERE).Value = iTemplateId;
cmd.Parameters.Add("@iViewId", SqlDbType.NOT_SURE_WHAT_YOU_WANT_HERE).Value = iViewId;
conn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
// Conditional statements
}
}
}

相关内容

  • 没有找到相关文章

最新更新