2016-06-13 6 views
2

Jetzt ist dies bei weitem das seltsamste, was ich bei der Arbeit mit MSSQL begegnet bin.Abfrage funktioniert ohne Parameter aber nicht mit Parametern

ich eine Tabelle namens Benutzer haben, ist es eine Zeile in sich hat, die „admin“ im Feld Benutzername hat, wenn ich die folgende Abfrage ausführen, es gibt mir keine Ergebnisse:

DECLARE @uname varchar; 

SET @uname = 'admin' 

SELECT * FROM [User] WHERE UserName = @uname 
Aber

, wenn ich das laufen, ich erwartete Ergebnisse:

SELECT * FROM [User] WHERE UserName = 'admin' 

Und dies ist die Tabellendefinition:

CREATE TABLE [dbo].[User](
    [ID] [bigint] IDENTITY(1,1) NOT NULL, 
    [UserName] [nvarchar](256) NOT NULL, 
    [FirstName] [nvarchar](256) NULL, 
    [LastName] [nvarchar](256) NULL, 
    [Email] [nvarchar](512) NULL, 
    [Password] [binary](64) NULL, 
    [GroupID] [int] NOT NULL, 
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], 
CONSTRAINT [UQ__Users__C9F284563A4F773F] UNIQUE NONCLUSTERED 
(
    [UserName] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

Und ich Greifen Sie auf diese Datenbank in C# -Anwendung zu, wenn ich den Benutzernamen in einem SqlParameter übergebe, gibt es mir einfach keine Ergebnisse.

Und hier ist eine Probe C# -Code:

string query = "SELECT COUNT(*) FROM [User] WHERE UserName = @uname"; 

using (var connection = new SqlConnection(ConnectionString)) 
{ 
    connection.Open(); 
    using (var cmd = new SqlCommand(query, connection)) 
    { 
     cmd.Parameters.Add(new SqlParameter("uname", "admin")); 

     int rowCount = (int)cmd.ExecuteScalar(); 
    } 
} 

ich keine Ausnahmen zu bekommen.

Irgendwelche Ideen?

+0

Zeig mir den Code, wo Sie auf das Problem stoßen – Chaitanya

+0

@durga, habe ich die C# -Code-Beispiel – Glen

+0

@ fehlt im Parameternamen hinzugefügt. –

Antwort

4

Wenn Sie Ihre String-Variable definieren haben Sie keine Größe angegeben, so wird standardmäßig Länge 1.

Run dies zu verdeutlichen:

DECLARE @uname varchar; 

SET @uname = 'admin' 

SELECT @uname 

Sie sehen das Ergebnis wird 'a' und nicht 'admin'

Ihre Definition ändern:

DECLARE @uname varchar(100) 

Beachten Sie auch, gemäß dem Kommentar von Nikola gibt ein @ ist aus C# -Code fehlt:

cmd.Parameters.Add(new SqlParameter("@uname", "admin")); 
+0

Das war es, ich weiß nicht, warum ich nicht daran gedacht habe, denn für das @ -Symbol funktionierte es immer ohne es, wie ich es in der Abfrage definiert habe, aber vielleicht ist es am besten, dies im SqlParameter zu tun nennen Sie auch, Danke! – Glen

1

schreiben

DECLARE @uname nvarchar(256); 

SET @uname = 'admin' 

SELECT * FROM [User] WHERE UserName = @uname 

und C# -Code

string query = "SELECT COUNT(*) FROM [User] WHERE UserName = @uname"; 

using (var connection = new SqlConnection(ConnectionString)) 
{ 
    connection.Open(); 
    using (var cmd = new SqlCommand(query, connection)) 
    { 
     cmd.Parameters.Add(new SqlParameter("uname", "@admin")); 

     int rowCount = (int)cmd.ExecuteScalar(); 
    } 
} 

Sie verwendet haben UserName nvarchar (256) während der Tabellenerstellung. Also ist es besser, den gleichen Datentyp & Größe

+0

Lektion gelernt, immer die Größe angeben, danke :) – Glen

+1

Oh und nur damit andere Benutzer nicht verwirrt werden, denke ich, dass Sie einen Fehler gemacht, indem Sie das @ -Symbol in den SqlParameter – Glen

Verwandte Themen