首页 > 解决方案 > 如何在 Visual Studio 的存储过程中使用查询来使用另一列中的值从表中获取 ID

问题描述

我正在尝试使用论坛上文本字段中的值来用我拥有的数据库表中的相应 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>”隐式转换为“TestingClassLibrary.PersonModel”。存在显式转换(您是否缺少演员表?)

标签: c#sqlsql-servervisual-studio-2019dapper

解决方案


我发现答案是

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

推荐阅读