如何使用 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);