我找到了很多答案,但似乎没有解决我的问题。
用户单击“新建”按钮开始添加新客户记录。存储过程返回CustID的最大值,然后递增并分配给txtCustID文本框。只要客户数据库中有记录,这就完美无缺。
但要创建第一个记录,这显然不起作用,因为你不能增加任何东西。
我需要做的是查看数据阅读器是否有任何内容,如果不是,我需要将txtCustID设置为“1”,否则正常运行现有代码。
这是我最近的尝试:
protected void btnNew_Click(object sender, EventArgs e)
{
Clear();
SqlCommand command = conn.CreateCommand();
SqlDataReader reader;
try
{
command.CommandText = "GetMax";
command.CommandType = CommandType.StoredProcedure;
conn.Open();
reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.HasRows)
{
while (reader.Read())
{
int CustMax = reader.GetInt32(0);
CustMax++;
txtCustID.Text = CustMax.ToString();
}
reader.NextResult();
}
}
else
{
txtCustID.Text = "1";
}
reader.Dispose();
}
catch (SqlException)
{
lblMessage.Text = "Cannot connect to database";
}
catch (Exception ex)
{
lblMessage.Text = ex.Message;
}
finally
{
command.Dispose();
conn.Dispose();
}
}
这是我的存储过程:
USE [30004243]
GO
/****** Object: StoredProcedure [dbo].[GetMax] Script Date: 26/11/2014 2:29:28 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetMax]
AS
SELECT MAX(CustID)
FROM Customer
这是设置为我的lblMessage标签的错误:“数据为空。无法在Null值上调用此方法或属性。”
虽然用户可以直接看到该消息并手动输入“1”到txtCustID(工作正常),但为了实用性,它应该将其设置为1。
非常感谢所有帮助,我也会在上一个问题中提出后添加,我正在使用.net 4.5。
答案 0 :(得分:0)
在这里发表评论/答案并在其他地方找到,我用执行标量替换了读者。这是有效的。
protected void btnNew_Click(object sender, EventArgs e)
{
Clear();
SqlCommand command = conn.CreateCommand();
try
{
command.CommandText = "GetMax";
command.CommandType = CommandType.StoredProcedure;
conn.Open();
object cMax = command.ExecuteScalar();
if (cMax != DBNull.Value)
{
int CustMax = (int)cMax;
CustMax++;
txtCustID.Text = CustMax.ToString();
}
else
{
txtCustID.Text = "1";
}
}
catch (SqlException)
{
lblMessage.Text = "Cannot connect to database";
}
catch (Exception ex)
{
lblMessage.Text = ex.Message;
}
finally
{
command.Dispose();
conn.Dispose();
}
}
答案 1 :(得分:-2)
我通常会检查读者是否为空。
示例:
if(reader != DNNull.value){
}else{
txtCustID.Text = "1";
}
答案 2 :(得分:-2)
这不是添加新记录的正确方法。但是,回答你的问题是:
if (reader.HasRows == false)
{
txtCustID.Text = "1";
}
编辑:你可以这样做,这很简单:
while (dr.Read())
{
if (dr.HasRows)
{
//Do things, insert, update
}
else
{
}
}