如何在ASP.net、sql服务器和c#之间传递数据
How to pass data between ASP.net, sql server and c#
我正在尝试开发一个从 SQL 服务器接收数据的网站,然后在列表框和文本框上显示信息,当用户 select 一个选项时,然后将数据插入 table 在数据库中。
我的 ASP.NET 控件是:
<asp:ListBox ID="ListBox1" ClientIDMode="static" runat="server"></asp:ListBox>
<asp:Button ID="btnInsert" runat="server" Text="Start" OnClick="btnInsert_Click" />
我需要将数据加载到列表框中,但不确定如何直接执行。为了检索信息并查看其是否有效,我这样做了:
protected void Page_Load(object sender, EventArgs e){
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader reader = cmd.ExecuteReader();
GridView2.DataSource= reader;
GridView2.DataBind();
con.Close();
var nProject = GridView2.Rows.Count;
for (int b = 0; b < nProject ; b++)
{
ListBox1.Items.Add(GridView2.Rows[b].Cells[0].Text);
}
}
然后我尝试将 selected 信息设置到文本框,但没有任何反应(因为我设法将数据从文本框插入到 SQL 服务器 INSERT):
protected void ListBox1_OnSelectedIndexChanged(object sender, System.EventArgs e)
{
TextBox2.Text = ListBox1.SelectedValue;
Response.Write("ListBox selectedIndexChanged");
}
单击按钮,信息将发送回数据库:
protected void btnInsert_Click(object sender, EventArgs e)
{
var IP = "111.111.11";
txtStatus.Text = "Start";
txtProject.Text = "PR-02";
var indice = 0;
// This always returns "0"
if (ListBox1.SelectedItem != null)
{
indice = ListBox1.SelectedIndex;
}
txtProject.Text = indice.ToString();
// Sql INSERT works fine, but only with info manually created. I can't get the real info to work
SqlConnection con = new SqlConnection("****");
SqlCommand cmd = new SqlCommand(@"INSERT INTO [dbo].[table3]
([project]
,[user_task]
,[status]
,[ip]
,[location])
VALUES
('" + txtProject.Text + "', '" + txtUser.Text + "', '" + txtStatus.Text + "', '" + txtIP.Text + "', '" + txtLocation.Text + "')", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
每次调用服务器时,Page_Load 是 运行 的首批事件之一,这意味着它在 btnInsert_Click 之前 运行s事件。
这意味着您在检查 SelectedItem 之前重新填充 ListBox1,这就是为什么 它总是 returns“0”
你必须考虑这一点并使用类似
的东西
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack || Page.IsCallback) return;
(...)
}
很难理解你想做什么,但我认为如果你更正 Page_Load 事件,ListBox1_OnSelectedIndexChanged 是没有用的。
旁注:
你真的应该从尽可能放置 using 语句开始(在 SqlConnection 和 SqlCommand 上)
注意 Sql 注入,可能是一个简单的测试程序,但你应该 永远,永远 这样做:@"INSERT INTO (...) 值 ('" + txtProject.Text + "'"
改为使用参数:
using(SqlConnection con = new SqlConnection("****"))
using(SqlCommand cmd = new SqlCommand("INSERT INTO [dbo].[table3] ([project]) values (@project)", con))
{
cmd.Parameters.AddWithValue("@project", txtProject.Text);
}
- 看来您正在使用 .Net Framework 和 aspx 页面,您真的应该考虑使用更新的技术 (.net core)。
我正在尝试开发一个从 SQL 服务器接收数据的网站,然后在列表框和文本框上显示信息,当用户 select 一个选项时,然后将数据插入 table 在数据库中。
我的 ASP.NET 控件是:
<asp:ListBox ID="ListBox1" ClientIDMode="static" runat="server"></asp:ListBox>
<asp:Button ID="btnInsert" runat="server" Text="Start" OnClick="btnInsert_Click" />
我需要将数据加载到列表框中,但不确定如何直接执行。为了检索信息并查看其是否有效,我这样做了:
protected void Page_Load(object sender, EventArgs e){
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader reader = cmd.ExecuteReader();
GridView2.DataSource= reader;
GridView2.DataBind();
con.Close();
var nProject = GridView2.Rows.Count;
for (int b = 0; b < nProject ; b++)
{
ListBox1.Items.Add(GridView2.Rows[b].Cells[0].Text);
}
}
然后我尝试将 selected 信息设置到文本框,但没有任何反应(因为我设法将数据从文本框插入到 SQL 服务器 INSERT):
protected void ListBox1_OnSelectedIndexChanged(object sender, System.EventArgs e)
{
TextBox2.Text = ListBox1.SelectedValue;
Response.Write("ListBox selectedIndexChanged");
}
单击按钮,信息将发送回数据库:
protected void btnInsert_Click(object sender, EventArgs e)
{
var IP = "111.111.11";
txtStatus.Text = "Start";
txtProject.Text = "PR-02";
var indice = 0;
// This always returns "0"
if (ListBox1.SelectedItem != null)
{
indice = ListBox1.SelectedIndex;
}
txtProject.Text = indice.ToString();
// Sql INSERT works fine, but only with info manually created. I can't get the real info to work
SqlConnection con = new SqlConnection("****");
SqlCommand cmd = new SqlCommand(@"INSERT INTO [dbo].[table3]
([project]
,[user_task]
,[status]
,[ip]
,[location])
VALUES
('" + txtProject.Text + "', '" + txtUser.Text + "', '" + txtStatus.Text + "', '" + txtIP.Text + "', '" + txtLocation.Text + "')", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
每次调用服务器时,Page_Load 是 运行 的首批事件之一,这意味着它在 btnInsert_Click 之前 运行s事件。
这意味着您在检查 SelectedItem 之前重新填充 ListBox1,这就是为什么 它总是 returns“0”
你必须考虑这一点并使用类似
的东西protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack || Page.IsCallback) return;
(...)
}
很难理解你想做什么,但我认为如果你更正 Page_Load 事件,ListBox1_OnSelectedIndexChanged 是没有用的。
旁注:
你真的应该从尽可能放置 using 语句开始(在 SqlConnection 和 SqlCommand 上)
注意 Sql 注入,可能是一个简单的测试程序,但你应该 永远,永远 这样做:@"INSERT INTO (...) 值 ('" + txtProject.Text + "'" 改为使用参数:
using(SqlConnection con = new SqlConnection("****"))
using(SqlCommand cmd = new SqlCommand("INSERT INTO [dbo].[table3] ([project]) values (@project)", con))
{
cmd.Parameters.AddWithValue("@project", txtProject.Text);
}
- 看来您正在使用 .Net Framework 和 aspx 页面,您真的应该考虑使用更新的技术 (.net core)。