2011-06-15 77 views
0

我需要一些幫助來處理我的代碼。我如何獲得scope_Identiy來將ImageId存儲爲會話變量。我一直堅持這個多年,但我不能得到它的工作。使用scope_Identity獲取ID以存儲在會話變量中

編輯:我相信從行SqlDataReader dataReader = cmd.ExecuteReader();下來是錯誤的。我只是不知道如何解決它。我對此仍然陌生。

protected void btnAddImage_Click(object sender, EventArgs e) 
{ 

    //store items in session variables 
    Session["AnimalName"] = AnimalNameTextBox.Text;   
    Session["TypeOfAnimal"] = TypeofAnimalDDL.Text; 
    Session["Breed"] = BreedTextBox.Text; 
    Session["CrossBreed"] = CrossBreedAddDDL.Text; 
    Session["Sex"] = SexDDL.Text; 
    Session["Size"] = SizeDDL.Text; 
    Session["Age"] = AgeDDL.Text; 
    Session["Location"] = LocationAddDDL.Text; 
    Session["Date"] = DateTextBox.Text; 
    Session["Contact"] = ContactTextBox.Text; 
    Session["Children"] = ChildrenDDL.Text; 
    Session["OtherCats"] = OtherCatsDDL.Text; 
    Session["OtherDogs"] = OtherDogsDDL.Text; 
    Session["Neutered"] = NeuteredDDL.Text; 
    Session["Microchipped"] = MicrochippedDDL.Text; 
    Session["Colour"] = ColourTextBox.Text; 
    Session["IndoorOutdoor"] = IndoorOutdoorDDL.Text; 
    Session["Details"] = DetailsTextBox.Text; 




     string s_Image_Name = txt_Image_Name.Text.ToString(); 
    if (FileUpload1.PostedFile != null && FileUpload1.PostedFile.FileName != "") 
    { 
     int newImageID ; 
     byte[] n_Image_Size = new byte[FileUpload1.PostedFile.ContentLength]; 
     HttpPostedFile Posted_Image = FileUpload1.PostedFile; 
     Posted_Image.InputStream.Read(n_Image_Size, 0, (int)FileUpload1.PostedFile.ContentLength); 

     SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RescueAnimalsIrelandConnectionString"].ConnectionString); 

     SqlCommand cmd = new SqlCommand(); 
     cmd.CommandText = "INSERT INTO Images(Name,[Content],Size,Type) VALUES (@Image_Name,@Image_Content,@Image_Size,@Image_Type); SELECT ImageID = SCOPE_IDENTITY()"; 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = conn; 


     SqlParameter Image_Name = new SqlParameter("@Image_Name", SqlDbType.VarChar, 500); 
     Image_Name.Value = txt_Image_Name.Text; 
     cmd.Parameters.Add(Image_Name); 

     SqlParameter Image_Content = new SqlParameter("@Image_Content", SqlDbType.Image, n_Image_Size.Length); 
     Image_Content.Value = n_Image_Size; 
     cmd.Parameters.Add(Image_Content); 

     SqlParameter Image_Size = new SqlParameter("@Image_Size", SqlDbType.BigInt, 99999); 
     Image_Size.Value = FileUpload1.PostedFile.ContentLength; 
     cmd.Parameters.Add(Image_Size); 

     SqlParameter Image_Type = new SqlParameter("@Image_Type", SqlDbType.VarChar, 500); 
     Image_Type.Value = FileUpload1.PostedFile.ContentType; 
     cmd.Parameters.Add(Image_Type); 


     SqlDataReader dataReader = cmd.ExecuteReader(); 

     if (dataReader.HasRows) 
     { 
      dataReader.Read(); 
      newImageID = Convert.ToInt32(dataReader["ImageID"]); 
     } 

     dataReader.Close(); 

     } 
+0

不解決這一問題,但你可以使用'ExecuteScalar',而不是使用DataReader – Earlz 2011-06-15 19:51:08

+0

到底是什麼錯誤/異常消息,你越來越多了?並且'newImageID'是一個類字段? – 2011-06-15 19:56:52

+0

@bala沒有錯誤,它只是不工作。我一直在努力工作了很長時間,並且讓它保存圖像,但不知道如何讓它給我保存的行的ID。謝謝 – RyanS 2011-06-15 20:18:39

回答

1

兩個建議:

首先,在存儲過程中,如果有可能做到這一點。返回你的新ID作爲輸出參數

其次(這可能需要一些實驗和拼寫檢查 - 我沒有嘗試過),給你的命令添加一個輸出參數並稍微改變文本文本以獲得值

SqlParameter Image_ID = new SqlParameter("@Image_ID", SqlDbType.Int); 
Image_ID.Direction = ParameterDirection.Output; 
cmd.Parameters.Add(Image_ID); 

更改命令文本:SELECT @Image_ID = SCOPE_IDENTITY()

讀結果:int newId = Convert.ToInt32(cmd.Parameters["@Image_ID"].Value)

+0

謝謝。不能得到它的工作。但認爲它是我的部分代碼而不是這個。 – RyanS 2011-06-15 20:21:28

+0

謝謝,我的新錯誤是一個ParameterName'Image_ID'的SqlParameter不包含在這個SqlParameterCollection中。我真的不知道我有什麼錯.. – RyanS 2011-06-15 21:20:46

+0

錯字 - 使用「@Image_ID」 - 答案固定 – Ray 2011-06-15 22:40:25

0

嘗試

Session["newImageID"] = Convert.ToInt32(dataReader["ImageID"]); 

,當你想要檢索newImageId,使用

int newImageID = Session["newImageID"] as Int32; 
+0

即時通訊現在嘗試。即時獲取錯誤ExecuteReader需要一個開放和可用的連接。連接的當前狀態已關閉。我錯過了什麼打開連接? – RyanS 2011-06-15 20:41:24

+0

使用「conn.open();」 – Ray 2011-06-15 21:08:51