如何在visualstudio的存储过程中使用query,使用另一列中的值从表中获取id

gdx19jrr  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(362)

我正在尝试使用论坛上文本字段的值,用数据库表中相应的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”。存在显式转换(是否缺少强制转换?)

j2datikz

j2datikz1#

我发现答案是

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

相关问题