gpt4 book ai didi

c# - SQL Server 2008 的 .NET 异常

转载 作者:太空宇宙 更新时间:2023-11-03 22:05:33 26 4
gpt4 key购买 nike

此代码在 Windows Server 2008 R2 和 SQL Server 2008 R2 Express 中的 IIS.7 上运行 ASP.NET。

这是一个简单的函数,它根据 3 个参数从数据库中进行选择,并返回包含所选行的对象。

此代码在大多数情况下运行正常,但在某些情况下,我会遇到名为 serial_number 的异常,它是数据库表中的列名。

这是一个完整的异常(exception):

[IndexOutOfRangeException: serial_number]
System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) +2674398
System.Data.SqlClient.SqlDataReader.GetOrdinal(String name) +249
System.Data.SqlClient.SqlDataReader.get_Item(String name) +23
PhoneSerialNumber.GetByPhoneNumber(String phoneNumber, String Country, String app) +423
UpdateMeClass.GenereteVersionTag(String Version, String PhoneNumber, String appName) +534
UpdateMe.ProcessRequest(HttpContext context) in c:\inetpub\wwwroot\me\Handlers\UpdateMe.ashx:63
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +599
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171

虽然我记录了异常情况下的3个参数,它们都不为空,但是请注意,当我在同一台服务器上使用相同的参数模拟相同的请求时,它运行正常。

我认为在异常的情况下查询运行正常,但是当通过此异常获取列的值时,我可能是错的。

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["meConnectionString"].ConnectionString);

connection.Open();
SqlCommand cmd;
using (connection)
{
cmd = new SqlCommand("select * from serialnumber_table join countries on country_id=countryid join applications on ApplicationID=App_ID where phone_number= @phoneNumber and country_name=@Country and app_name=@app", connection);
cmd.Parameters.AddWithValue("@phoneNumber", phoneNumber);
cmd.Parameters.AddWithValue("@Country", Country);
cmd.Parameters.AddWithValue("@app", app);

using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
sn = new PhoneSerialNumber();
sn.SerialNumber = rdr["serial_number"].ToString();
sn.PhoneNumber = rdr["phone_Number"].ToString();
sn.PhoneLang = rdr["Lang"].ToString();
sn.PhoneModel = rdr["ModelName"].ToString();
sn.ApplicationVersion = rdr["App_Version"].ToString();
sn.DealerCode = rdr["dealer_code"].ToString();
sn.Size = rdr["size"].ToString();

TimeSpan Time = DateTime.Parse(rdr["Renewal_Date"].ToString()) - new DateTime(1970, 1, 1, 0, 0, 0);
sn._renewal_Date = (long)(Time.TotalMilliseconds);

rdr.Dispose();
connection.Dispose();
return sn;
}
}

sn = new PhoneSerialNumber();
sn.SerialNumber = null;
sn.PhoneNumber = null;
sn.PhoneModel = null;
sn.PhoneLang = null;
sn.ApplicationVersion = null;
sn.DealerCode = null;
connection.Dispose();
return sn;
}

最佳答案

唯一想到的是,由于某种原因,当您运行查询时,未返回 serial_number 列。与其执行 SELECT *,不如尝试对您尝试返回的每个单独的列执行选择。

您的序列号列是否与其他任何表格重复?有任何消息来源的观点吗?!如果 serial_number 来自 View 并且您更改了基础表,则可能需要重建它以便为 View 显示正确的列。

我唯一一次看到列名异常是当前数据读取器中指定的列不存在,就像它一开始就没有被选中或者根本不存在一样

关于c# - SQL Server 2008 的 .NET 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8580181/

26 4 0
文章推荐: c# - 如何将 kml 文件加载到谷歌地图中?
文章推荐: jquery - div中的滚动条滚动而不是页面滚动条
文章推荐: javascript - 使用图像而不是未打开的