我正在学习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'";
&#34; Properties.Settings.Default.authSQL&#34;代码只不过是字符串的快捷方式&#34; SELECT * FROM AUTH&#34; - 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);
}
}
答案 0 :(得分:1)
这里不需要数据集。如果你知道你想要的sql:使用它 - 也许有一些参数化。例如,使用&#34; dapper&#34;,我们可以:
string firstName = "Jason";
var lastNames = con.Query<string>(
"SELECT last_name FROM Employees WHERE first_name = @firstName",
new { firstName }).ToList();
答案 1 :(得分:1)
检查一下....希望这也有效......
//String Declaration
string Sqlstr = "select CountryCode,Description,Nationality from ca_countryMaster where isDeleted=0 and CountryCode = 'CAN' ";
string DBCon = "Data Source=RAJA;Initial Catalog=CareHMS;Integrated Security=True;";
SqlConnection SqlCon = new SqlConnection(DBCon);
SqlDataAdapter Sqlda;
DataSet ds = new DataSet();
try
{
SqlCon.Open();
Sqlda = new SqlDataAdapter(Sqlstr, SqlCon);
Sqlda.Fill(ds);
gdView.DataSource = ds.Tables[0];
gdView.DataBind();
}
catch (Exception ex)
{
lbl.text = ex.Message;
}
finally
{
ds.Dispose();
SqlCon.Close();
}