C# 需要有关数据库连接和查询代码的帮助吗
在我下面的代码中,cmdquery可以工作,但hrquery不能。如何获取另一个查询来填充网格视图?我需要建立新连接还是使用相同的连接?你们能帮帮我吗?我不熟悉C#和asp。这是我拼凑的一些意大利面代码。这一切都可能是错误的,所以如果你有更好的方法,请随意分享C# 需要有关数据库连接和查询代码的帮助吗,c#,asp.net,sql,oracle,C#,Asp.net,Sql,Oracle,在我下面的代码中,cmdquery可以工作,但hrquery不能。如何获取另一个查询来填充网格视图?我需要建立新连接还是使用相同的连接?你们能帮帮我吗?我不熟悉C#和asp。这是我拼凑的一些意大利面代码。这一切都可能是错误的,所以如果你有更好的方法,请随意分享 if (Badge != String.Empty) { string cmdquery = "SELECT * from Employees WHERE Badge ='" + Badge + "'"; string h
if (Badge != String.Empty)
{
string cmdquery = "SELECT * from Employees WHERE Badge ='" + Badge + "'";
string hrquery = "SELECT CLOCK_IN_TIME, CLOCK_OUT_TIME FROM CLOCK_HISTORY WHERE Badge ='" + Badge + "'";
OracleCommand cmd = new OracleCommand(cmdquery);
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
conn.Open();
OracleDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
this.xUserNameLabel.Text += reader["EMPLOYEE_NAME"];
this.xDepartmentLabel.Text += reader["REPORT_DEPARTMENT"];
}
OracleCommand Hr = new OracleCommand(hrquery);
Hr.Connection = conn;
Hr.CommandType = CommandType.Text;
OracleDataReader read = Hr.ExecuteReader();
while (read.Read())
{
xHoursGridView.DataSource = hrquery;
xHoursGridView.DataBind();
}
}
conn.Close();
我甚至不打算讨论你应该如何使用
使用s和方法:p
if (Badge != String.Empty)
{
string cmdquery = "SELECT * from Employees WHERE Badge ='" + Badge + "'";
string hrquery = "SELECT CLOCK_IN_TIME, CLOCK_OUT_TIME FROM CLOCK_HISTORY WHERE Badge ='" + Badge + "'";
OracleCommand cmd = new OracleCommand(cmdquery);
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
conn.Open();
OracleDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
this.xUserNameLabel.Text += reader["EMPLOYEE_NAME"];
this.xDepartmentLabel.Text += reader["REPORT_DEPARTMENT"];
}
OracleCommand Hr = new OracleCommand(hrquery);
Hr.Connection = conn;
Hr.CommandType = CommandType.Text;
OracleDataReader read = Hr.ExecuteReader();
//What's this next line? Setting the datasource automatically
// moves through the data.
//while (read.Read())
//{
//I changed this to "read", which is the
//datareader you just created.
xHoursGridView.DataSource = read;
xHoursGridView.DataBind();
//}
}
conn.Close();
我甚至不打算讨论你应该如何使用使用s和方法:p
if (Badge != String.Empty)
{
string cmdquery = "SELECT * from Employees WHERE Badge ='" + Badge + "'";
string hrquery = "SELECT CLOCK_IN_TIME, CLOCK_OUT_TIME FROM CLOCK_HISTORY WHERE Badge ='" + Badge + "'";
OracleCommand cmd = new OracleCommand(cmdquery);
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
conn.Open();
OracleDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
this.xUserNameLabel.Text += reader["EMPLOYEE_NAME"];
this.xDepartmentLabel.Text += reader["REPORT_DEPARTMENT"];
}
OracleCommand Hr = new OracleCommand(hrquery);
Hr.Connection = conn;
Hr.CommandType = CommandType.Text;
OracleDataReader read = Hr.ExecuteReader();
//What's this next line? Setting the datasource automatically
// moves through the data.
//while (read.Read())
//{
//I changed this to "read", which is the
//datareader you just created.
xHoursGridView.DataSource = read;
xHoursGridView.DataBind();
//}
}
conn.Close();
您的数据访问代码通常如下所示:
string sql = "SELECT * FROM Employee e INNER JOIN Clock_History c ON c.Badge = e.Badge WHERE e.Badge = @BadgeID";
using (var cn = new OracleConnection("your connection string here"))
using (var cmd = new OracleCommand(sql, cn))
{
cmd.Parameters.Add("@BadgeID", OracleDbType.Int).Value = Badge;
cn.Open();
xHoursGridView.DataSource = cmd.ExecuteReader();
xHoursGridView.DataBind();
}
请注意,这只是常规模板。你会想根据你的具体需要对它进行一些调整。从中获得的重要内容是使用
块来正确创建和处理连接对象,以及防止sql注入的参数
至于连接问题,也有例外,但通常一次只能对一个活动结果集使用连接。因此,您可以从原始代码中重用相同的conn
对象,但前提是您必须从上一个命令中完全使用完它。如果需要,也可以打开两个连接。不过,最好的选择是尽可能将相关查询合并到单个sql语句中。您的数据访问代码通常如下所示:
string sql = "SELECT * FROM Employee e INNER JOIN Clock_History c ON c.Badge = e.Badge WHERE e.Badge = @BadgeID";
using (var cn = new OracleConnection("your connection string here"))
using (var cmd = new OracleCommand(sql, cn))
{
cmd.Parameters.Add("@BadgeID", OracleDbType.Int).Value = Badge;
cn.Open();
xHoursGridView.DataSource = cmd.ExecuteReader();
xHoursGridView.DataBind();
}
请注意,这只是常规模板。你会想根据你的具体需要对它进行一些调整。从中获得的重要内容是使用
块来正确创建和处理连接对象,以及防止sql注入的参数
至于连接问题,也有例外,但通常一次只能对一个活动结果集使用连接。因此,您可以从原始代码中重用相同的conn
对象,但前提是您必须从上一个命令中完全使用完它。如果需要,也可以打开两个连接。不过,最好的选择是尽可能将相关查询合并到单个sql语句中。您的问题是什么?如果您的代码正常工作,您想知道什么?这不是问题的答案,但您应该认真阅读以下内容:(主要考虑您的代码当前所遭受的SQL注入漏洞)。修复了一个问题您的问题是什么?如果您的代码正常工作,您想知道什么?这不是对您的问题的回答,但您应该认真阅读以下内容:(主要考虑您的代码当前遭受的SQL注入漏洞).修正了一点问题请详细说明我想知道你的时间不会被浪费请详细说明我想知道你的时间不会被浪费谢谢你的回答现在对我来说就像希腊语,但也许以后我会更好地理解它,我今天在大学里开始学习高级编程和高级数据库设计,也许这会帮助我更清楚一些。谢谢你的回复现在对我来说就像希腊语一样,但也许以后我会更好地理解它,我今天在大学里开始了高级编程和高级数据库设计,所以也许这会帮助我更清楚一些。