如何在Visual Studio的存储过程中使用查询,以使用另一列中的值从表中获取ID

时间:2020-07-25 14:01:11

标签: c# sql sql-server visual-studio-2019 dapper

我正在尝试使用论坛上一个文本字段中的值,用我拥有的数据库表中的相应ID填充另一个文本字段。

我的程序是

CREATE PROCEDURE [dbo].[spGet_PersonId_byName]
    @PersonName VARCHAR(50)
AS
BEGIN
    SELECT dbo.People.ID
    FROM dbo.People
    WHERE dbo.People.Name = @PersonName;
END

我认为问题是我怎么称呼它,我需要获取一个要在文本字段中使用的字符串值。

这是论坛代码:

private void PersonNameDropDownBox_TextChanged(object sender, EventArgs e)
{
    string NameToUse = PersonNameDropDownBox.Text;

    foreach (IDataConnection db in GlobalConfig.Connections)
    {
        PersonIDTextBox.Text = db.PersonIdLookup(NameToUse).PersonId.ToString();
    }
}

这是方法

public PersonModel PersonIdLookup(string NameToUse)
{
    PersonModel OutPutModel;

    using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnString(db)))
    {
        var i = new DynamicParameters();
        i.Add("@PersonName", NameToUse);
        OutPutModel = connection.Query<PersonModel>("[Trial DB].dbo.spGet_PersonId_byName", i, commandType: CommandType.StoredProcedure);
    }

    return OutPutModel;
}

抱歉,数据混乱,但是我对所有这些都是新手。

由于出现此错误而无法构建

无法将类型'System.Collections.Generic.IEnumerable '隐式转换为'TestingClassLibrary.PersonModel'。存在显式转换(您是否缺少演员表?)

1 个答案:

答案 0 :(得分:0)

我找到了答案

private void PersonNameDropDownBox_TextChanged(object sender, EventArgs e)
        {
            string NameToUse = PersonNameDropDownBox.Text;
            foreach (IDataConnection db in GlobalConfig.Connections)
            {
                PersonIDTextBox.Text = db.PersonIdLookup(NameToUse);
            }
        }

public string PersonIdLookup(string NameToUse)
        {
            string OutputId;
            using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnString(db)))
            {
                var i = new DynamicParameters();
                i.Add("@PersonName", NameToUse);
                OutputId = connection.ExecuteScalar<string>("[Trial DB].dbo.spGet_Person_byName",i,commandType: CommandType.StoredProcedure);
            }
            return OutputId;
        }
CREATE PROCEDURE [dbo].[spGet_PersonId_byName]
    @PersonName VARCHAR(50)
AS
BEGIN
    SELECT dbo.People.ID
    FROM dbo.People
    WHERE dbo.People.Name = @PersonName;
END
相关问题