2015-10-16 60 views
1

我得到一個DataReader初始化錯誤。我知道這已被回答了很多次,但這些情況似乎不符合我的情況。錯誤消息開始「執行讀取器:連接屬性尚未初始化」。數據讀取器初始化(再次)

程序:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data.SqlClient; 

namespace BookList 

{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SqlConnection dataConnection = new SqlConnection(); 
      dataConnection.ConnectionString = "Integrated Security = true; Initial Catalog = BIBLIOGRAPHY;Data Source = JBSHAPIRO-PC\\SQLEXPRESS"; 

      dataConnection.Open(); 
      Console.Write("Enter author's name: "); 
      string person = Console.ReadLine(); 




      SqlCommand datacommand = new SqlCommand(); 
      datacommand.CommandText = "SELECT AUTHOR, TITLE, YEAR, KEYWORDS 

FROM BOOKS WHERE AUTHOR = ' " + person + " ' "; 


      Console.WriteLine("About to Execute: {0}\n\n", 

datacommand.CommandText); 


      SqlDataReader dataReader = datacommand.ExecuteReader(); 

      while (dataReader.Read()) 
      { 
       string author1 = dataReader.GetString(0); 
       string title1 = dataReader.GetString(1); 
       int year1 = dataReader.GetInt32(2); 
       string keywords1 = dataReader.GetString(3); 

       Console.WriteLine(
        "Author: {0}\n, Title: {1}\n, Year: {2}\n; Key Words: {4)\n\n", 
       author1, title1, year1, keywords1); 
       dataReader.Close(); 
      } 
      dataConnection.Close(); 
     } 
    } 
} 

代碼工作與C#3寫一個不同的數據庫,但現在我想用C#6 有什麼建議?

+0

有趣知道爲什麼有關格式錯誤代碼,並不太正確的說法問題「的代碼工作與C#3寫了不同的數據庫」有這麼多upvotes。我看到[MCVE]問題如何能夠確定(和不SQL注入)... –

回答

2

你做

SqlCommand datacommand = new SqlCommand(); 

但我沒有看到一個

datacommand.Connection = dataConnection; 

這種方式既不是命令也不是SqlDataReader的知道什麼連接使用。

附註:我會stronly意見,對動態SQL添加參數。

這是一個良好的開端,以防止SQL注入

SqlCommand datacommand = new SqlCommand("SELECT AUTHOR, TITLE, YEAR, KEYWORDS FROM BOOKS WHERE AUTHOR = @AUTHOR", dataConnection); 

datacommand.Parameters.AddWithValue("@AUTHOR", person); 
3

你永遠不相關的SqlCommand與連接:

SqlCommand datacommand = new SqlCommand(); 
datacommand.Connection = dataConnection; 

沒有它,命令(通過擴展數據讀取器)有沒有任何使用連接的知識。

+0

這不能真正回答(即使是完全正確的)爲「代碼工作與C#3寫了不同的數據庫」 ...不知道如何投票。 –

+1

@AlexeiLevenkov:我的猜測是關於在別處工作的代碼聲明可能是錯誤的。非常相似的代碼完全可以在另一個環境中「工作」。但問題中的確切代碼會在問題中產生錯誤。 – David

0

感謝所有爲你的答案。其實這個程序來自Microsoft Press的C#2008 Step By Step。它可以與舊版本的C#一起工作。 在提交問題後,我注意到您確實需要在SQL語句中指定連接。

我感謝大家的幫助。 塞利納斯