Ich versuche, ein privates Nachrichtensystem zu erstellen.Abrufen der ID mit nur Benutzername
Was ich bisher habe. - Überprüfen, ob der Player mit dem Namen aus der Textbox existiert, andernfalls wird der Fehler angezeigt.
Jetzt versuche ich, es in die Tabelle einzufügen. Das Problem ist, dass die Tabelle mit 2 colums
to_user_id
from_user_id
Und becasuse ich eine Textbox bin mit dem Namen des Benutzers eingeben, ich nicht, wie to_user_id von den Benutzern Tabelle abzurufen, während nur Namen.
dies ist mein Code
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Connect"].ToString());
conn.Open();
SqlCommand cmdd = new SqlCommand();
cmdd.CommandText = "select * from [users]";
cmdd.Connection = conn;
SqlDataReader rd = cmdd.ExecuteReader();
while (rd.Read())
{
if (rd[1].ToString() == TextBox_To.Text)
{
flag = false;
break;
}
}
conn.Close();
if (flag == true)
{
Label1.Visible = true;
Label1.Text = "User does not exist";
}
else if(flag == false)
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Connect"].ToString()))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = @"INSERT INTO messages (message_title, message_content, to_user_id, from_user_id, message_date)
VALUES (@title, @content, @to, @from, @date)";
cmd.Parameters.AddWithValue("@title", TextBox_Title.Text);
cmd.Parameters.AddWithValue("@content", TextBox_Msg.Text.Replace("\n", "<br/>"));
cmd.Parameters.AddWithValue("@to", TextBox_To.Text);
cmd.Parameters.AddWithValue("@date", DateTime.Now);
cmd.Parameters.AddWithValue("@from", Session["id"].ToString());
con.Open();
cmd.ExecuteNonQuery();
}
}
Natürlich habe ich einen Fehler bekam
Conversion failed when converting the nvarchar value 'username' to data type int.
@edit,
@cordan Ich habe versucht, diese
DECLARE @user_id = (SELECT id FROM users WHERE [email protected]);
INSERT INTO messages (message_title, message_content, to_user_id, from_user_id, message_date)
VALUES (@title, @content, @user_id, @from, @date);
cmd.Parameters.AddWithValue("@to", TextBox_To.Text);
diesen Fehler bekam
Incorrect syntax near '='.
Must declare the scalar variable "@user_id".
haben Sie darüber nachgedacht aufzublicken den Benutzer aus der Benutzer-Tabelle? d. h. SELECT ID FROM Benutzer WHERE Benutzername = @ Benutzername, dann das Ergebnis dieser Abfrage verwenden? – yaakov
@codran Ich bin mir nicht sicher, wie ich die ID, die nachgeschlagen wurde, in eine Variable schreiben kann, damit ich sie als 'cmd.Parameters.AddWithValue ("@ to", recovered_id) verwenden kann;' – Harugawa
SET @user = (SELECT ID FROM Benutzer WHERE Benutzername = @Benutzername) –