2010-12-11 7 views
0

J'essaye d'insérer l'identification d'utilisateur de table dans la session de table, champ session_user, using la zone de texte, mais il semble que cela ne fonctionne pas ..SELECT dans la requête INSERT?

Voici mon code SQL, j'utilise le studio visuel et essayant d'insérer dans une table SQL Server

SqlCommand addsession = new SqlCommand 
    ("insert into dbo.session(session_user) 
    values (select user_id from dbo.users where username = '" + TextBox1.Text + "')", 
    badersql); 
+6

http://xkcd.com/327/ – Oded

+1

Et vous ** ** DEVRIEZ par tous les moyens utiliser un * requête * paramétrée ** au lieu de concaténer ensemble votre instruction INSERT ...... –

Répondre

6

vous ne devez pas utiliser le mot-clé VALUES lorsque vous faites une INSERT ... SELECT:

insert into dbo.session (session_user) select user_id from dbo.users ... 
+0

SqlCommand addsession = new SqlCommand ("insérer dans dbo.session (session_user) sélectionnez user_id de dbo.users où username = '" + TextBox1.Text + "'", badersql); , j'ai essayé de le faire mais il m'a donné cette erreur "Syntaxe incorrecte près du mot-clé 'session_user'." – Bader

+0

quelqu'un peut-il aider? – Bader

+0

ok merci cela a fonctionné – Bader

4

Si vous insérez le résultat d'une requête dans une autre table, Jus t omettre le mot-clé VALUES.

Le mot-clé VALUES peut toujours être remplacé par un SELECT 'dummy', 'value' simple des valeurs que vous souhaitez insérer, mais je vous suggère d'utiliser encore VALUES chaque fois que vous voulez préciser que vos résultats ne pas proviennent d'une requête .

Cela étant dit, s'il vous plaît utiliser parameterized queries !! Imaginez si quelqu'un d'entrer dans le texte suivant dans TextBox1:

' or 1 = 1

Que se passerait-il?

+0

merci pour le conseil, mais ce projet sera sera localement sur mon ordinateur et il ne sera pas utilisé sur internet maintenant ou dans le futur, je sais que les requêtes paramétrées sont la bonne chose à faire, mais – Bader

2

Pour insérer des enregistrements d'une utilisation de cet insert requête syntaxe:

insert into dbo.session (session_user) 
select user_id from dbo.users where username = '" + TextBox1.Text + "' 

Vous pouvez faire un select top 1 userid si vous attendez une ligne à insérer comme dans l'énoncé de valeurs.

+0

Si vous envoyez du code ou du code XML, ** veuillez ** mettre en surbrillance ces lignes dans l'éditeur de texte et cliquer sur le bouton "code" (101 010) dans la barre d'outils de l'éditeur la syntaxe le met en évidence! –

0

Je l'ai fait, le problème était que je ne peux pas nommer mon enregistrement session_user, donc j'ai remplacé par se_user et cela résout le problème.

merci u all ur aide

si l'instruction SQL correcte est

insert into sessions (se_user) select USER_ID from users where username = '';