0

データベースから取得した値がテキストボックスに表示されないのはなぜですか? 以下のコードを書きましたが、うまくいきません。このコードはフォーム読み込みイベントで書かれていることに注意してください。私が犯した過ちを教えてください。

using (SqlConnection myConnection = new SqlConnection(Common.GetDBConnectionString()))
{
    using (SqlCommand cmd = new SqlCommand("P.ID from dbo.Tb_Patient", myConnection))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        myConnection.Open();

        //SqlParameter custId = (cmd.Parameters.AddWithValue("@dbo.Tb_Patient", 10));

        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            if (reader.Read())
            {
                string nameValue = reader["P.ID"].ToString();
                MessageBox.Show("value is:",nameValue);

                txtid.Text = nameValue;


            }
            else {

                MessageBox.Show("Data is not retrived");
            }
      }
  }
}

コメントからの更新:

CREATE TABLE [dbo].[Tb_Patient]( [P.Id] [int] IDENTITY(1,1) NOT NULL, [P.Name] [nvarchar](50) NOT NULL, [P.Age] [nvarchar](50) NOT NULL, [P.Contact] [nvarchar](50) NOT NULL, [P.Date] [datetime] NULL, [P.Occupation] [nvarchar](50) NOT NULL, [P.Gender] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Tb_Patient] PRIMARY KEY CLUSTERED ( [P.Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

4

3 に答える 3

3

この行は、有効な SQL クエリではなく、ストアド プロシージャの名前でもないようです。

using (SqlCommand cmd = new SqlCommand("P.ID from dbo.Tb_Patient", myConnection))

おそらく正しいテキストは次のとおりです。

using (SqlCommand cmd = new SqlCommand("select [P.ID] from dbo.Tb_Patient", myConnection))

もちろん、これはストアド プロシージャではなく、通常のコマンド テキストです。

cmd.CommandType = CommandType.Text;

編集:テーブルのスキーマを確認した後、回答を修正しました。唯一のエラーは、データベース エンジンに渡されるコマンド テキストの先頭に SELECT 句がないことです。ただし、フィールド名を角括弧で囲む必要がありますP.ID

フィールド名を変更することをお勧めします。この命名スキーマは、結合された複数のテーブルに存在する名前にプレフィックスを付ける必要がある場合に使用されるため、非常に紛らわしいものです。

参照: 名前のエイリアス

于 2013-03-23T17:26:44.100 に答える
0
  • データベースが大文字と小文字を区別しないかどうかわからない場合は、常に作成時と同じ名前を使用してください。CREATE TABLE [dbo].[Tb_Patient]( [P.Id] [int] ...
  • コマンド文字列を で終了し ;ます。

で試してみてください

using (SqlConnection myConnection = new SqlConnection(connectionString))
{
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "SELECT [P.Id] from dbo.Tb_Patient;";
    cmd.CommandType = CommandType.Text;
    cmd.Connection  = myConnection;
    myConnection.Open();
    SqlDataReader reader = cmd.ExecuteReader();

    if (reader.Read())
        {
            string nameValue = reader["P.Id"].ToString();
            MessageBox.Show("value is:",nameValue);
            txtid.Text = nameValue;
        }
        else {
            MessageBox.Show("Data is not retrieved");
        }

    reader.Close();
}
于 2013-03-23T21:43:12.233 に答える
0

ストアド プロシージャまたは有効な SQL ステートメントのいずれかを使用してください

select P.ID from dbo.Tb_Patient as P
于 2013-03-23T17:28:25.027 に答える