将数据库值保存为变量
Saving database values as variables
我不知道如何将 Access 数据库中的单个数据保存到变量中。
我知道你可以这样保存变量:
int memberID;
cmd.CommandText = "SELECT * FROM MemberDetails WHERE [MemberID] =@MemberID";
cmd.Parameters.AddWithValue("@MemberID", memberID);
try
{
con.Open();
dr = cmd.ExecuteReader();
while (dr.Read())
{
lblName.Text = (memberID);
}
con.Close();
}
catch (Exception)
{
throw;
}
但是我想将所有数据保存到单独的变量中,如下所示:
cmd.CommandText = "SELECT [MemberID] = @MemberID, [Name] = @Name, [Surname] = @Surname";
cmd.Parameters.AddWithValue("@MemberID", memberID);
cmd.Parameters.AddWithValue("@Name", name);
cmd.Parameters.AddWithValue("@Surname", surname);
这显然行不通(否则我不会在这里)但是这样的事情是否可能,我将如何着手去做?
如果我错了请纠正我,但看起来您正在尝试检索已知 MemberID
的行。如果是这样的话,那么你总是可以这样做
int memberID = [some number];
DataTable results = new DataTable(); //Your SQL row will be "saved" in here
string command = string.Format("select * from MemberDetails where MemberID = {0}", memberID);
using (SqlDataAdapter sda = new SqlDataAdapter(command, con))
{
sda.Fill(results); //Your DataTable now has your values
}
您所需要的只是可以将 memberID
提供给条件变量的东西。
也许可以看看 Microsoft 的这个很棒的教程,它解释了如何使用 C# 查询 MS Access 数据库以及如何处理结果:https://msdn.microsoft.com/en-us/library/ms971485.aspx
你可以做些什么来达到预期的结果(这是对上述文章稍作修改的示例):
OleDbConnection conn = null;
OleDbDataReader reader = null;
try
{
conn = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0; " +
"Data Source=" + Server.MapPath("MyDataFolder/MyAccessDb.mdb"));
conn.Open();
OleDbCommand cmd =
new OleDbCommand("Select MemberID, Name, Surname FROM MemberDetails WHERE MemberID = @MemberID", conn);
cmd.Parameters.AddWithValue("@MemberID", memberID);
reader = cmd.ExecuteReader();
while(reader.Read())
{
memberID = reader.GetInt32(reader.GetOrdinal("MemberID"));
name = reader["Name"].ToString();
surname = reader["Surname"].ToString();
}
}
finally
{
if (reader != null) reader.Close();
if (conn != null) conn.Close();
}
不过要小心,这只有在数据库查询中只返回一个结果时才能正常工作。当返回多条记录时,只有最后一条将存储在变量中。
当您需要捕获多个结果时,您可能想要创建一个成员 class,为每条记录创建一个实例并将该实例添加到成员列表中。像这样:
public class Member
{
public int MemberId {get; set;}
public string Name {get; set;}
public string Surname {get; set;}
}
public IList<Member> GetMembers()
{
OleDbConnection conn = null;
OleDbDataReader reader = null;
try
{
conn = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0; " +
"Data Source=" + Server.MapPath("MyDataFolder/MyAccessDb.mdb"));
conn.Open();
OleDbCommand cmd =
new OleDbCommand("Select MemberID, Name, Surname FROM MemberDetails", conn);
reader = cmd.ExecuteReader();
var members = new List<Member>();
while(reader.Read())
{
var member = new Member();
member.MemberID = reader.GetInt32(reader.GetOrdinal("MemberID"));
member.Name = reader["Name"].ToString();
member.Surname = reader["Surname"].ToString();
members.Add(member);
}
return members;
}
finally
{
if (reader != null) reader.Close();
if (conn != null) conn.Close();
}
return null;
}
我不知道如何将 Access 数据库中的单个数据保存到变量中。
我知道你可以这样保存变量:
int memberID;
cmd.CommandText = "SELECT * FROM MemberDetails WHERE [MemberID] =@MemberID";
cmd.Parameters.AddWithValue("@MemberID", memberID);
try
{
con.Open();
dr = cmd.ExecuteReader();
while (dr.Read())
{
lblName.Text = (memberID);
}
con.Close();
}
catch (Exception)
{
throw;
}
但是我想将所有数据保存到单独的变量中,如下所示:
cmd.CommandText = "SELECT [MemberID] = @MemberID, [Name] = @Name, [Surname] = @Surname";
cmd.Parameters.AddWithValue("@MemberID", memberID);
cmd.Parameters.AddWithValue("@Name", name);
cmd.Parameters.AddWithValue("@Surname", surname);
这显然行不通(否则我不会在这里)但是这样的事情是否可能,我将如何着手去做?
如果我错了请纠正我,但看起来您正在尝试检索已知 MemberID
的行。如果是这样的话,那么你总是可以这样做
int memberID = [some number];
DataTable results = new DataTable(); //Your SQL row will be "saved" in here
string command = string.Format("select * from MemberDetails where MemberID = {0}", memberID);
using (SqlDataAdapter sda = new SqlDataAdapter(command, con))
{
sda.Fill(results); //Your DataTable now has your values
}
您所需要的只是可以将 memberID
提供给条件变量的东西。
也许可以看看 Microsoft 的这个很棒的教程,它解释了如何使用 C# 查询 MS Access 数据库以及如何处理结果:https://msdn.microsoft.com/en-us/library/ms971485.aspx
你可以做些什么来达到预期的结果(这是对上述文章稍作修改的示例):
OleDbConnection conn = null;
OleDbDataReader reader = null;
try
{
conn = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0; " +
"Data Source=" + Server.MapPath("MyDataFolder/MyAccessDb.mdb"));
conn.Open();
OleDbCommand cmd =
new OleDbCommand("Select MemberID, Name, Surname FROM MemberDetails WHERE MemberID = @MemberID", conn);
cmd.Parameters.AddWithValue("@MemberID", memberID);
reader = cmd.ExecuteReader();
while(reader.Read())
{
memberID = reader.GetInt32(reader.GetOrdinal("MemberID"));
name = reader["Name"].ToString();
surname = reader["Surname"].ToString();
}
}
finally
{
if (reader != null) reader.Close();
if (conn != null) conn.Close();
}
不过要小心,这只有在数据库查询中只返回一个结果时才能正常工作。当返回多条记录时,只有最后一条将存储在变量中。
当您需要捕获多个结果时,您可能想要创建一个成员 class,为每条记录创建一个实例并将该实例添加到成员列表中。像这样:
public class Member
{
public int MemberId {get; set;}
public string Name {get; set;}
public string Surname {get; set;}
}
public IList<Member> GetMembers()
{
OleDbConnection conn = null;
OleDbDataReader reader = null;
try
{
conn = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0; " +
"Data Source=" + Server.MapPath("MyDataFolder/MyAccessDb.mdb"));
conn.Open();
OleDbCommand cmd =
new OleDbCommand("Select MemberID, Name, Surname FROM MemberDetails", conn);
reader = cmd.ExecuteReader();
var members = new List<Member>();
while(reader.Read())
{
var member = new Member();
member.MemberID = reader.GetInt32(reader.GetOrdinal("MemberID"));
member.Name = reader["Name"].ToString();
member.Surname = reader["Surname"].ToString();
members.Add(member);
}
return members;
}
finally
{
if (reader != null) reader.Close();
if (conn != null) conn.Close();
}
return null;
}