Les types de données texte et varchar sont incompatibles dans l'égalité de l'opérateur
Je suis en train d'essayer d'accéder à tous les enregistrements de la base de données sur une grille de données de la vue en fonction du type de connexion de l'utilisateur par le biais d'un formulaire d'avoir 2 zones de texte pour l'nom_d'utilisateur et le mot de passe, respectivement, et sur le bouton soumettre les enregistrements sont affichés. Mais le code que j'ai écrit me donne l'erreur suivante: Les types de données texte et varchar sont incompatibles dans l'égalité de l'opérateur. Veuillez suggérer des modifications.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Data.SqlClient;
namespace Login_form
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
string str = ConfigurationSettings.AppSettings["constring"].ToString();
SqlConnection sqlcon = new SqlConnection(str);
try
{
sqlcon.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
SqlCommand sqlcmd = new SqlCommand("select user_type from employee where user_name='" + textBox1.Text + "'and pwd= '" + textBox2.Text + "' ;", sqlcon);
SqlDataReader myReader = sqlcmd.ExecuteReader();
string user_type=string.Empty;
while(myReader.Read())
{
user_type= myReader["user_type"].ToString();
}
sqlcon.Close();
sqlcon.Open();
SqlCommand sqlcmd2 = new SqlCommand("select * from employee where user_type= '" +user_type + "'", sqlcon);
SqlDataReader myReader2 = sqlcmd2.ExecuteReader();
/* SqlDataAdapter sqladapter = new SqlDataAdapter(sqlcmd2);
DataSet ds = new DataSet();
sqladapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];*/
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Email_ID", typeof(string));
dt.Columns.Add("Contact", typeof(string));
dt.Columns.Add("Address", typeof(string));
while (myReader2.Read())
{
DataRow dr = dt.NewRow();
dr["ID"] = myReader2["ID"];
dr["Name"] = myReader2["user_name"];
dr["Email_ID"] = myReader2["Email_ID"];
dr["Contact"] = myReader2["Contact"];
dr["Address"] = myReader2["Address"];
dt.Rows.Add(dr);
}
dataGridView1.DataSource = dt;
sqlcon.Close();
}
}
}
While(myreader.Lire) et après que vous essayer d'obtenir des données à partir de myreader2 ?
est-ce que votre erreur se produit sur
quelle est votre erreur survenant sur?
Votre code est très salissant.
votre code est vulnérable à une Injection Sql....
est-ce que votre erreur se produit sur
sqlcmd.ExecuteReader();
ou sur sqlcmd2.ExecuteReader();
?quelle est votre erreur survenant sur?
Votre code est très salissant.
votre code est vulnérable à une Injection Sql....
OriginalL'auteur ankita alung | 2013-02-28
Vous devez vous connecter pour publier un commentaire.
C'est un simple Problème de Base de données.
dans la Base de données de la génération changement de script:
:
dans votre cas columnname serait "user_name" ou "user_type"
ce problème se produit car SQL de Type de texte est !pas compatible pour la comparaison avec les chaînes!
dès que vous changez le type de texte varchar() l'opération doit travailler
VARCHAR(MAX)
est disponible pour les situations où vous souhaitez stocker de manière arbitraire des valeurs de texte.Est-il un moyen de faire linq travailler avec une colonne? Puisque je ne peux pas modifier le tableau de droite maintenant.
pas à ma connaissance, non. Le problème est que le type SQL n'est pas réellement "compatible" pour une utilisation en tant que Chaîne de caractères. En tant que tel la seule solution est de changer le code SQL de la Colonne de type de données
C'est vraiment génial, que plus de quatre ans plus tard, c'est encore un problème avec EF. J'aime quand l'outil qui est censé faire abstraction des connaissances de la base de données échoue totalement et complètement à ce que devrait être une tâche simple.
OriginalL'auteur Vogel612