c#声明记录集变量等于存储过程中的字符串
我正在将以前vb代码中的经典asp转换为c#中的asp.net。将变量分配给记录集存储过程变量(objRs)时遇到问题。我试着把它设置为c#声明记录集变量等于存储过程中的字符串,c#,asp.net,vb.net,C#,Asp.net,Vb.net,我正在将以前vb代码中的经典asp转换为c#中的asp.net。将变量分配给记录集存储过程变量(objRs)时遇到问题。我试着把它设置为 strip=objRs(“strip”) 但这给了我一个关于objRS的错误“应为局部变量ADODB.Recordset objRS-方法委托或事件” 我用括号试过: strip=objRs[“strip”] 这给了我第二条带上的错误:“不明确索引器:ADODB.Fields(在接口\记录集中);ADODB.Fields(在接口\记录集15中);”“(在接口\
strip=objRs(“strip”)代码>
但这给了我一个关于objRS的错误“应为局部变量ADODB.Recordset objRS-方法委托或事件”
我用括号试过:
strip=objRs[“strip”]代码>
这给了我第二条带上的错误:“不明确索引器:ADODB.Fields(在接口\记录集中);ADODB.Fields(在接口\记录集15中);”“(在接口\记录集20中);”“(在接口\记录集21中);匹配”
我还尝试了各种Convert.ToString方法,但没有成功
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.Common" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.EnterpriseServices" %>
<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %>
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb.OleDbConnection;
using ADODB;
<%
%>
<!DOCTYPE html HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"https://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=7, IE=9, IE=8, IE=10, IE=11" />
<!--The viewport meta tag is used to improve the presentation and behavior on iOS devices-->
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<title>My Mapping Application</title>
<script runat="server">
private void OpenConnection(string connectionString)
{
string txtTaxYear;
//txtTaxYear;
string webacct, strap, straptype = null, ownername, facetMap;
txtTaxYear = Request.Form["ddlTaxYear"].Trim();
webacct = Request.Form["txtAcct"].Trim();
nhCd = Request.Form["nh_cd"].Trim();
nhGrpCd = Request.Form["nh_grp_cd"].Trim();
//var objConn = null;
OleDbConnection objConn = new OleDbConnection("Provider=SQLOLEDB; DRIVER={SQL Server};SERVER=XYZserver;UID=xyzuser;PWD=xyzpassword;DATABASE=xyzdatabase\" + (txtTaxYear + \";\")");
objConn.Open();
ADODB.Recordset objRs= new ADODB.RecordsetClass();
//var objRs = Server.CreateObject("ADODB.Recordset");
// -------------------------------------------------
// Execute SQL Function to determine Property Type
// -------------------------------------------------
ADODB.Recordset rsRci= new ADODB.RecordsetClass();
//var rsRci = Server.CreateObject("ADODB.Recordset");
var mysql = ("select h_" + (txtTaxYear + (".dbo.hc_fn_rci(\'" + (webacct + "\') AS rci"))));
//while (!(rsRci.State == 1))
while (rsRci.State != (int) ConnectionState.Open)
rsRci.Open(mysql, objConn);
while ((!rsRci.BOF) & (!rsRci.EOF))
{
straptype == rsRci("rci");
switch (straptype)
{
case null:
straptype = "N";
break;
case "":
straptype = "B";
break;
}
rsRci.MoveNext();
}
object i;
object j;
strap = "";
if ((straptype == "C"))
{
var strSql = ("EXEC hcad..sp_maps_HE_getSubjectAcctInfo \'" + (txtTaxYear + ("\', \'" + (webacct + "\', \'C\'"))));
objRs.Open(strSql, objConn);
if (!objRs.EOF)
{
strap = objRs("strap");
ownerName = objRs("ownerName");
siteAddr = objRs("site_addr");
nhCd = objRs("nh_cd");
yrImpr = objRs("yr_impr");
dorCd = objRs("dor_cd");
facetMap = objRs("facet_map").Substring(0, 4);
}
}
// -------------------------------------------------
// Clean Up Objects
// -------------------------------------------------
if (rsRci.State == 1)
{
rsRci.Close();
}
if (objRs.State == 1)
{
objRs.Close();
}
rsRci = null;
objRs = null;
objConn = null;
}
}
</script>
</head>
使用系统数据;
使用System.Data.SqlClient;
使用System.Data.OleDb.OleDbConnection;
使用ADODB;
我的地图应用程序
私有void OpenConnection(字符串连接字符串)
{
字符串txtTaxYear;
//txtTaxYear;
字符串webacct,strap,straptype=null,所有者名称,facetMap;
txtTaxYear=Request.Form[“ddlTaxYear”].Trim();
webacct=Request.Form[“txtact”].Trim();
nhCd=Request.Form[“NHU cd”].Trim();
nhGrpCd=Request.Form[“nh_grp_cd”].Trim();
//var objConn=null;
OleDbConnection objConn=新OleDbConnection(“Provider=SQLOLEDB;DRIVER={SQL Server};Server=XYZserver;UID=xyzuser;PWD=xyzpassword;DATABASE=xyzdatabase\”+(txtTaxYear+\;\”);
objConn.Open();
ADODB.Recordset objRs=new ADODB.RecordsetClass();
//var objRs=Server.CreateObject(“ADODB.Recordset”);
// -------------------------------------------------
//执行SQL函数以确定属性类型
// -------------------------------------------------
ADODB.Recordset rsRci=new ADODB.RecordsetClass();
//var rsRci=Server.CreateObject(“ADODB.Recordset”);
var mysql=(“选择h_uxYear+(txtTaxYear+(“.dbo.hc_fn\u rci”(\'”+(webacct+“\')作为rci”)));
//而(!(rsRci.State==1))
while(rsRci.State!=(int)ConnectionState.Open)
Open(mysql,objConn);
而(!rsRci.BOF)和(!rsRci.EOF))
{
straptype==rsRci(“rci”);
开关(straptype)
{
大小写为空:
straptype=“N”;
打破
案例“”:
straptype=“B”;
打破
}
rsRci.MoveNext();
}
对象一;
对象j;
皮带=”;
如果((straptype==“C”))
{
var strSql=(“EXEC hcad..sp_maps_HE_getSubjectAcctInfo\”+(txtTaxYear+(“\”,“\”+(webacct+“\”,“\”));
Open(strSql,objConn);
如果(!objRs.EOF)
{
皮带=objRs(“皮带”);
ownerName=objRs(“ownerName”);
siteAddr=objRs(“site_addr”);
nhCd=objRs(“NHU cd”);
yrImpr=objRs(“yr_impr”);
dorCd=objRs(“dor_cd”);
facetMap=objRs(“facet_-map”)。子字符串(0,4);
}
}
// -------------------------------------------------
//清理对象
// -------------------------------------------------
如果(rsRci.State==1)
{
rsRci.Close();
}
if(objRs.State==1)
{
objRs.Close();
}
rsRci=null;
objRs=null;
objConn=null;
}
}
2017年7月31日更新:
我已经采纳了Alex和Chetan的建议,重新编写了代码,只使用ADO.Net和SQL连接和命令。我现在可以将变量分配给以前的记录集objRs存储过程变量(现在是SqlCommand)使用SqlDataReader。我采纳了Alex和Chetan的建议,重新编写了代码,以便仅使用ADO.Net和SQL连接和命令。我现在可以使用SqlDataReader将变量分配给以前的记录集objRs存储过程变量(现在是SqlCommand)。您使用的是()
您似乎应该使用[]
作为索引器。您似乎通过COM和OleDbConnection混合使用ADODB?如果您使用SQL Server,则应坚持使用SqlConnection/SqlCommand等-后者至关重要,因为当前您有一个巨大的SQL注入漏洞。我尝试使用'strap=objRs[“strap”]但我仍然收到一条错误消息。您需要更正课程并为应用程序选择正确的模板,asp.net webforms或asp.net mvc。对于这个特定问题,您最好切换到ADO.net,它具有更好的功能,可以使用SQL server执行数据库操作。