читать таблицу с уникальным идентификатором ID - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу выполнить поиск в базе данных и, если код существует, установить идентификатор, равный сеансу [SID]. Идентификатор моей таблицы uniqueidentifier и имеет ошибку. ошибка на r.read();:

Ошибка преобразования при преобразовании строки символов в уникальный идентификатор

Код:

protected void btnSearch_Click(object sender, EventArgs e)
{
    string CodeReg = txtCodeReg.Text;

    Guid g = new Guid();

    SqlConnection con = new SqlConnection();
    con.ConnectionString = "Data Source=.;Initial Catalog=Db_Hospital;Integrated Security=True";

    con.Open();

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandText = "Select CodeMeli From Tbl_Staff where (ID=@ID)";
    cmd.Parameters.AddWithValue("@ID", txtCode.Text);

    SqlDataReader r = cmd.ExecuteReader();
    r.Read();

    if (r.HasRows)
    {
        Session["SID"] = g;
    }
}

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Еще одно возможное решение. Просто конвертируйте идентификатор уникального идентификатора в VARCHAR (36).

protected void btnSearch_Click(object sender, EventArgs e)
{
    string CodeReg = txtCodeReg.Text;

    Guid g = new Guid();

    SqlConnection con = new SqlConnection();
    con.ConnectionString = "Data Source=.;Initial Catalog=Db_Hospital;Integrated Security=True";

    con.Open();

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandText = "Select CodeMeli From Tbl_Staff where (CONVERT(VARCHAR(36),ID)=@ID)";
    cmd.Parameters.AddWithValue("@ID", txtCode.Text);

    SqlDataReader r = cmd.ExecuteReader();
    r.Read();

    if (r.HasRows)
    {
        Session["SID"] = g;
    }
}
0 голосов
/ 03 сентября 2018

AddWithValue создаст параметр, тип которого является типом переданного значения. В вашем случае этот параметр имеет тип string. Но для правильной работы вы должны вместо этого передать уникальный идентификатор.

if (!Guid.TryParse(txtCode.Text, out Guid result))
{
    Console.WriteLine("not a valid guid");
    return;
}
cmd.Parameters.Add("@id", SqlDbType.UniqueIdentifier).Value = result;

В общем, вы должны стараться избегать этого AddWithValue, потому что есть много нежелательных побочных эффектов. Вы можете прочитать об этом сценарии в

Использование Parameters.AddWithValue в SqlDataAdapter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...