如何使用 Dapper c# .net 检索数据库信息并将其显示到文本框中
How to retrieve and display Database info into Textbox using Dapper c# .net
我已经尝试使用 ADO.NET 将数据库中的信息显示到文本框中,现在我正在学习如何使用 dapper
这是我的代码:
try
{
using (var command = new SqlCommand("DisplayInfo", con))
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString))
{
SqlDataAdapter sda = new SqlDataAdapter(command);
if (db.State != ConnectionState.Open)
db.Open();
DynamicParameters param = new DynamicParameters();
param = new DynamicParameters("@Fname");
param.Add("@Fname", tb2.Text);
param = new DynamicParameters("@exist");
param.Add("@exist", SqlDbType.Bit);
con.Execute("DisplayInfo", param, commandType: CommandType.StoredProcedure);
DataTable dt = new DataTable();
sda.Fill(dt);
tb2.Text = dt.Rows[0]["Fname"].ToString();
tb3.Text = dt.Rows[0]["Lname"].ToString();
tb4.Text = dt.Rows[0]["Age"].ToString();
exist = Convert.ToBoolean(command.Parameters["@exist"].Value);
if (db.State != ConnectionState.Closed)
db.Close();
}
}
并且存储过程 DisplayInfo 只是一个基本的 SELECT 查询
我做错了什么?
SP 代码:
@Fname nvarchar(50),
@exist bit output
AS
BEGIN
IF NOT EXISTS
(SELECT ID,Fname,Lname,Age FROM CloneInfo
WHERE Fname=@Fname)
BEGIN
SET @exist=0
END
ELSE
BEGIN
SELECT ID,Fname,Lname,Age FROM CloneInfo
WHERE Fname=@Fname
SET @exist=1
END
END
Plus CloneInfo table 有:ID、Fname、Lname、Age 作为列
我遇到了这两个错误:
1-过程或函数 'DisplayInfo' 需要未提供的参数“@Fname”。
2-table 'CloneInfo' 中标识列的显式值只能在使用列列表且 IDENTITY_INSERT 为 ON 时指定。
您似乎需要将调用从 'con.Execute' 更改为 'db.Query',请参阅下面的示例,我假设 'con' 是 SqlConnection 类型。
class Program
{
static string connectionString = @"xxxxxxxxxx";
static void Main(string[] args)
{
Console.WriteLine("Input name: ");
var name = Console.ReadLine();
IEnumerable<TestClass> results;
using (IDbConnection db = new SqlConnection(connectionString))
{
var parameters = new DynamicParameters();
parameters.Add("@FName", name, DbType.String, ParameterDirection.Input, 20);
results = db.Query<TestClass>("Procedure",
commandType: CommandType.StoredProcedure,
param: parameters);
}
foreach(var result in results)
{
Console.WriteLine(result);
}
Console.ReadLine();
}
}
class TestClass
{
public string FName { get; set; }
public string LName { get; set; }
public int Age { get; set; }
public override string ToString()
{
return $"FName: {FName}, LName: {LName}, Age: {Age}";
}
}
虽然插入标识值不是好的做法,但根据您的情况。你可以试试这个。
首先为您的 SP 输入第一行:
SET IDENTITY_INSERT CloneInfo ON
最后一行是:
SET IDENTITY_INSERT CloneInfo OFF
并将参数传递为:
DynamicParameters param = new DynamicParameters();
param.Add("@Fname", tb2.Text);
param.Add("@exist", SqlDbType.Bit);
con.Execute("DisplayInfo", param, commandType: CommandType.StoredProcedure);
我已经尝试使用 ADO.NET 将数据库中的信息显示到文本框中,现在我正在学习如何使用 dapper
这是我的代码:
try
{
using (var command = new SqlCommand("DisplayInfo", con))
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString))
{
SqlDataAdapter sda = new SqlDataAdapter(command);
if (db.State != ConnectionState.Open)
db.Open();
DynamicParameters param = new DynamicParameters();
param = new DynamicParameters("@Fname");
param.Add("@Fname", tb2.Text);
param = new DynamicParameters("@exist");
param.Add("@exist", SqlDbType.Bit);
con.Execute("DisplayInfo", param, commandType: CommandType.StoredProcedure);
DataTable dt = new DataTable();
sda.Fill(dt);
tb2.Text = dt.Rows[0]["Fname"].ToString();
tb3.Text = dt.Rows[0]["Lname"].ToString();
tb4.Text = dt.Rows[0]["Age"].ToString();
exist = Convert.ToBoolean(command.Parameters["@exist"].Value);
if (db.State != ConnectionState.Closed)
db.Close();
}
}
并且存储过程 DisplayInfo 只是一个基本的 SELECT 查询 我做错了什么?
SP 代码:
@Fname nvarchar(50),
@exist bit output
AS
BEGIN
IF NOT EXISTS
(SELECT ID,Fname,Lname,Age FROM CloneInfo
WHERE Fname=@Fname)
BEGIN
SET @exist=0
END
ELSE
BEGIN
SELECT ID,Fname,Lname,Age FROM CloneInfo
WHERE Fname=@Fname
SET @exist=1
END
END
Plus CloneInfo table 有:ID、Fname、Lname、Age 作为列
我遇到了这两个错误:
1-过程或函数 'DisplayInfo' 需要未提供的参数“@Fname”。
2-table 'CloneInfo' 中标识列的显式值只能在使用列列表且 IDENTITY_INSERT 为 ON 时指定。
您似乎需要将调用从 'con.Execute' 更改为 'db.Query',请参阅下面的示例,我假设 'con' 是 SqlConnection 类型。
class Program
{
static string connectionString = @"xxxxxxxxxx";
static void Main(string[] args)
{
Console.WriteLine("Input name: ");
var name = Console.ReadLine();
IEnumerable<TestClass> results;
using (IDbConnection db = new SqlConnection(connectionString))
{
var parameters = new DynamicParameters();
parameters.Add("@FName", name, DbType.String, ParameterDirection.Input, 20);
results = db.Query<TestClass>("Procedure",
commandType: CommandType.StoredProcedure,
param: parameters);
}
foreach(var result in results)
{
Console.WriteLine(result);
}
Console.ReadLine();
}
}
class TestClass
{
public string FName { get; set; }
public string LName { get; set; }
public int Age { get; set; }
public override string ToString()
{
return $"FName: {FName}, LName: {LName}, Age: {Age}";
}
}
虽然插入标识值不是好的做法,但根据您的情况。你可以试试这个。
首先为您的 SP 输入第一行:
SET IDENTITY_INSERT CloneInfo ON
最后一行是:
SET IDENTITY_INSERT CloneInfo OFF
并将参数传递为:
DynamicParameters param = new DynamicParameters();
param.Add("@Fname", tb2.Text);
param.Add("@exist", SqlDbType.Bit);
con.Execute("DisplayInfo", param, commandType: CommandType.StoredProcedure);