Sql server 如何使用Web服务更新ASP.NET中的文本框控件?
我有一个web表单,我需要使用唯一的ID添加、更新、删除和读取。到目前为止,我已经成功地添加、更新和删除了一些功能,没有遇到什么麻烦 然而,现在我很难让我的read函数正常工作(我知道我有一个webform,它有四个文本字段:ID、FIRSTNAME、姓氏和地址)。基本上,当先前创建的ID(使用“添加”按钮)输入文本字段并单击“读取”按钮时,它应根据输入的ID使用存储的条目更新其他3个文本字段 这是我在web表单上的隐藏代码(cs)Sql server 如何使用Web服务更新ASP.NET中的文本框控件?,sql-server,ado.net,asmx,webmethod,Sql Server,Ado.net,Asmx,Webmethod,我有一个web表单,我需要使用唯一的ID添加、更新、删除和读取。到目前为止,我已经成功地添加、更新和删除了一些功能,没有遇到什么麻烦 然而,现在我很难让我的read函数正常工作(我知道我有一个webform,它有四个文本字段:ID、FIRSTNAME、姓氏和地址)。基本上,当先前创建的ID(使用“添加”按钮)输入文本字段并单击“读取”按钮时,它应根据输入的ID使用存储的条目更新其他3个文本字段 这是我在web表单上的隐藏代码(cs) protected void cmdRead_Click(ob
protected void cmdRead_Click(object sender, EventArgs e)
{
// Create a reference to the Web service
DbWebService.WebService1 proxy = new DbWebService.WebService1();
// Create a person details object to send to the Web service.
string ADDRESS;
string SURNAME;
string FIRSTNAME;
string ID;
ADDRESS = txtAddress.Text;
SURNAME = txtSurname.Text;
FIRSTNAME = txtFirstname.Text;
ID = txtID.Text;
// Attempt to store in the Web service
bool rsp = proxy.ReadPerson(int.Parse(ID), FIRSTNAME, SURNAME, ADDRESS);
// Inform the user
if (rsp)
{
lblOutcome.Text = "Successfully read data.";
txtFirstname.Text = FIRSTNAME;
txtSurname.Text = SURNAME;
txtAddress.Text = ADDRESS;
}
else
{
lblOutcome.Text = "Failed to read data! Select a previously created ID!";
}
}
这是我在web服务上的web功能(SQL Server Express数据库所在的位置)
}
现在的问题是,当我单击read时,我会收到一条成功消息(使用一个标签,您可以在后面的代码中看到),但字段不会更新,我假设这是因为(rtn=true;
)语句。因此,我认为这样做可能会奏效:
rtn = (bool)reader["ADDRESS"];
然而,我得到一个指定的强制转换是无效的,所以我想可能bool在这个上下文中不起作用,我想如果我使用string,它可能会起作用,但是我如何转换,我认为rtn需要一个关于读取器的值,对吗
基本上,我只是在寻找一个解决方案,它将更新web表单中的文本字段 您的代码有几个问题。最明显的是,您的代码永远无法从数据库返回数据。您正在将
FIRSTNAME
等发送到web服务-您没有从web服务返回它们
没有理由让服务返回bool
来告诉您是否成功。如果服务失败,让它抛出异常。相反,您应该从数据库中返回字段作为服务的返回
在职期间:
public class Person
{
public string FIRSTNAME {get;set;}
public string SURNAME {get;set;}
public string ADDRESS {get;set;}
}
[WebMethod]
public Person ReadPerson(int ID)
{
// ...
if (reader.Read())
{
// A record exists, thus return the value
Person p = new Person();
p.FIRSTNAME = (string)reader["FIRSTNAME"];
p.SURNAME = (string)reader["SURNAME"];
p.ADDRESS = (string)reader["ADDRESS"];
rtn = p;
}
connection.Close();
return rtn;
}
此外,除非别无选择,否则不应使用WebMethod或ASMXWeb服务。ASMX是一种遗留技术,仅用于向后兼容。它不应该用于新的开发。您应该改用WCF
代码的其他问题解决如下:
[WebMethod]
public Person ReadPerson(int id)
{
using (
var connection =
new SqlConnection(
@"Data Source=.\SQLEXPRESS;
AttachDbFilename='|DataDirectory|\Database.mdf';
Integrated Security=True;
User Instance=True")
)
{
connection.Open();
using (
var command =
new SqlCommand(@"
SELECT FIRSTNAME, SURNAME, ADDRESS
FROM PersonalDetails
WHERE ID = @id",
connection))
{
var idParameter =
command.Parameters.Add(
"@id", SqlDbType.Int);
idParameter.Value = id;
using (var reader = command.ExecuteReader())
{
if (!reader.Read())
{
return null;
}
return new Person
{
Firstname =
(string)
reader["FIRSTNAME"],
Surname =
(string)
reader["SURNAME"],
Address =
(string)
reader["ADDRESS"]
};
}
}
}
}
主要问题是,SqlConnection
、SqlCommand
和SqlDataReader
都需要在内部使用
块进行实例化。这可以确保无论是否引发异常,对象都被释放(关闭)
其次,您不应该养成通过字符串操作构建查询的习惯;甚至不用String.Format。这使您容易受到“SQL注入”攻击。使用参数可以解决这个问题。请参阅MSDN中的“”
最后一个小问题:我建议你摆脱在显而易见的陈述上发表评论的习惯。例如,
Open
打开到数据库的连接,或者return
返回一个值,不需要注释。我该怎么做?抱歉,对sql来说非常陌生。我必须使用web方法和web服务,这是我任务的要求。您好,这很有意义,我已根据需要更改了web服务,但是我不确定在我的落后代码(cs.)中如何链接这两个服务。//试图存储在Web服务bool rsp=proxy.ReadPerson(int.Parse(ID)、FIRSTNAME、姓氏、地址)中;显然,我不应该在这里使用bool,但如果更改为string,我会得到错误(不能隐式地将bool转换为string)。我应该在这里做什么(查看代码aboce)嗨,这很有意义,我已经根据需要更改了web服务,但是我不确定在我的落后代码(cs.)中如何链接这两个服务。//试图存储在Web服务bool rsp=proxy.ReadPerson(int.Parse(ID)、FIRSTNAME、姓氏、地址)中;显然,我不应该在这里使用bool,但如果更改为string,我会得到错误(不能隐式地将bool转换为string)。我应该在这里做什么(看看代码aboce)都很好!我想起来了,非常感谢网络服务信息真的帮了我的忙,我真的很迷茫。非常感谢!!:)
[WebMethod]
public Person ReadPerson(int id)
{
using (
var connection =
new SqlConnection(
@"Data Source=.\SQLEXPRESS;
AttachDbFilename='|DataDirectory|\Database.mdf';
Integrated Security=True;
User Instance=True")
)
{
connection.Open();
using (
var command =
new SqlCommand(@"
SELECT FIRSTNAME, SURNAME, ADDRESS
FROM PersonalDetails
WHERE ID = @id",
connection))
{
var idParameter =
command.Parameters.Add(
"@id", SqlDbType.Int);
idParameter.Value = id;
using (var reader = command.ExecuteReader())
{
if (!reader.Read())
{
return null;
}
return new Person
{
Firstname =
(string)
reader["FIRSTNAME"],
Surname =
(string)
reader["SURNAME"],
Address =
(string)
reader["ADDRESS"]
};
}
}
}
}