これはMSSQLで作業しているときに私が遭遇した最も奇妙なことです。クエリはパラメータなしで動作しますが、パラメータなしで動作します
私はユーザーと呼ばれるテーブルを持って、それがユーザー名フィールドに「admin」を持っていることの1行、私は次のクエリを実行すると、それは私に何も結果を与えるものではありませんがあります。
DECLARE @uname varchar;
SET @uname = 'admin'
SELECT * FROM [User] WHERE UserName = @uname
を
しかし、私はこれを実行すると、私が手に予想される結果:
SELECT * FROM [User] WHERE UserName = 'admin'
そして、これは、テーブル定義である:
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]
そしてI C#アプリケーションでこのデータベースにアクセスするので、SqlParameterでユーザー名を渡すと結果が表示されません。ここ
とは、サンプルのC#コードです:
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();
}
}
私は例外を取得していません。
アイデア?あなたは結果が表示されます
DECLARE @uname varchar;
SET @uname = 'admin'
SELECT @uname
が
'a'
ない
'admin'
です:あなたはあなたの文字列変数を定義するときの長さがデフォルト1.
実行して、これを説明するためのよう
問題が発生したコードを表示します。 – Chaitanya
@durga、C#コードサンプルを追加しました。 – Glen
@がパラメータ名にありません。 –