我正在学习C#和SQL Server.我正在学习一个简单的教程,这使我创建了一个连接和更新数据库的类DBconnection.然后我有一个简单的C#表单,使用按钮和DataSet在表行上来回导航以克隆数据,然后在某些标签上显示信息.
没有问题’直到这里,但后来我想,如果我想显示特定行的单个值(列),如果“显示具有特定名字的人的姓氏”,该怎么办?
我熟悉SQL查询命令,所以我想要的是这样的:
SELECT last_name FROM Employees WHERE first_name = 'Jason'
按照我的代码……
DBconnection.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace cemiGEST
{
/// <summary>
/// A class that makes the connection to the SQL Database
/// </summary>
class DBconnection
{
// variables
private string sql_string;
private string strCon;
System.Data.SqlClient.SqlDataAdapter da_1;
// set methods
public string Sql
{
set { sql_string = value; }
}
public string connection_string
{
set { strCon = value; }
}
// DataSet
public System.Data.DataSet GetConnection
{
get { return MyDataSet(); }
}
// MyDataSet method
private System.Data.DataSet MyDataSet()
{
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(strCon);
con.Open();
da_1 = new System.Data.SqlClient.SqlDataAdapter(sql_string, con);
System.Data.DataSet dat_set = new System.Data.DataSet();
da_1.Fill(dat_set, "Table_Data_1");
con.Close();
return dat_set;
}
// Update DB method
public void UpdateDB(System.Data.DataSet ds)
{
System.Data.SqlClient.SqlCommandBuilder cb = new System.Data.SqlClient.SqlCommandBuilder(da_1);
cb.DataAdapter.Update(ds.Tables[0]);
}
}
}
我只是通过递增一个更新行号的变量来访问值(当来回移动时).下面是一些示例代码.
public partial class Example : Form
{
// variables
DBconnection objConnect;
string conStringAUTH;
DataSet ds;
DataRow dr;
int maxRows;
int inc = 0;
private void Login_Load(object sender, EventArgs e)
{
CloseBeforeLogin = true;
try
{
objConnect = new DBconnection();
conStringAUTH = Properties.Settings.Default.authConnectionString;
objConnect.connection_string = conStringAUTH;
objConnect.Sql = Properties.Settings.Default.authSQL;
ds = objConnect.GetConnection;
maxRows = ds.Tables[0].Rows.Count;
if (maxRows == 0)
{
MessageBox.Show("No user found. Loading first run wizard.");
NewUser newUser = new NewUser();
newUser.ShowDialog();
}
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
}
我确信这很简单,但我没有到达那里.
编辑:
我更喜欢使用我的类DBconnection而没有外部库.我不是在PC的项目,所以现在无法测试任何东西,但经过一夜安眠,在(重新)查看我的代码之后,我可能找到了答案.请告诉我你是否认为这样可以解决问题:
在我的第二个类(我连接并访问数据库)中,我已经使用了SQL查询,更具体地说:
objConnect.Sql = Properties.Settings.Default.authSQL;
此查询(authSQL)由我创建并嵌入在“设置”中,此处我将其导入.所以,如果我改为做以下事情,你认为它会起作用吗:
objConnect.Sql = "SELECT last_name FROM Employees WHERE first_name = 'Jason'";
“Properties.Settings.Default.authSQL”代码只不过是字符串“SELECT * FROM AUTH”的快捷方式 – AUTH是我的表,为简单起见,我称之为Employees.
所以,它会是这样的:
public partial class Example : Form
{
// variables
DBconnection objConnect;
string conStringAUTH;
DataSet ds;
DataRow dr;
int maxRows;
int inc = 0;
private void Login_Load(object sender, EventArgs e)
{
CloseBeforeLogin = true;
try
{
objConnect = new DBconnection();
conStringAUTH = Properties.Settings.Default.authConnectionString;
objConnect.connection_string = conStringAUTH;
objConnect.Sql = "SELECT last_name FROM Employees WHERE first_name = 'Jason'";
ds = objConnect.GetConnection;
// Data manipulation here
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
最佳答案 这里不需要数据集.如果你知道你想要的sql:使用它 – 也许有一些参数化.例如,使用“dapper”,我们可以:
string firstName = "Jason";
var lastNames = con.Query<string>(
"SELECT last_name FROM Employees WHERE first_name = @firstName",
new { firstName }).ToList();