2016-11-23 95 views
-1

我正在製作一個簡單的新聞系統,用戶可以在其中寫新聞故事,並添加一張照片。我如何從一張桌子上取得身份證件並放置在另一張桌子上?

我所知道的「邏輯」的背後是什麼,我需要做的:

  • 保存在數據庫中的圖像細節,並得到,當它被插入

  • 保存的消息稱,被使用的ID故事與圖片ID一起我剛剛得到上述

我怎麼能填充newsPicID場tblNews與當PIC被插入到被使用的ID picID字段在tblPic?

我的INNER JOIN會看起來像這樣嗎?

SELECT * FROM tblNews INNER JOIN picTable ON picTable.picID = newsTable.newsPicID 

對於任何引用,這裏是我當前的代碼:

 if (FileUpload1.PostedFile != null) 
     { 
      string FileName = Path.GetFileName(FileUpload1.PostedFile.FileName); 

      // Save files to disk 
      FileUpload1.SaveAs(Server.MapPath("/images/admin/news/" + FileName)); 

      // Add Entry to DataBase 
      String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["conString"].ConnectionString; 

      SqlConnection con = new SqlConnection(strConnString); 
      string strQuery = "insert into tblFiles (FileName, FilePath) values(@FileName, @FilePath); insert into tblNews (newsTitle, newsDate, newsSummmary, newsContent) values(@newsTitle, @newsDate, @newsSummmary, @newsContent)"; 

      SqlCommand cmd = new SqlCommand(strQuery); 
      cmd.Parameters.AddWithValue("@FileName", FileName); 
      cmd.Parameters.AddWithValue("@FilePath", "/images/admin/news/" + FileName); 
      cmd.Parameters.AddWithValue("@newsTitle", txtnewstitle.Text);    
      cmd.Parameters.AddWithValue("@newsDate", txtnewsdate.Text);    
      cmd.Parameters.AddWithValue("@newsSummary", txtnewssummary.Text);    
      cmd.Parameters.AddWithValue("@newsContent", txtnewsmaincontent.Text);    

      cmd.CommandType = CommandType.Text; 
      cmd.Connection = con; 

      try { 
       con.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
      finally { 
       con.Close(); 
       con.Dispose(); 
      } 
     } 
+0

是picID標識字段? –

+0

@Vicky_Thinking是的。 tblFiles中的picID和tblNews中的newsID是主要和標識 – cmp

回答

1

我建議建立一個存儲過程來節省,文件和新聞。然後你可以使用一個事務來控制整個操作。

事情與此類似:

create procedure dbo.NewsInsert 
(@FileName varchar(65) 
,@FilePath varchar(300) 
,@newsTitle varchar(100) 
,@newsDate DateTime 
,@newsSummary varchar(100) 
,@newsContent varchar(1024) 
) 
as 
begin 

    begin transaction 

    insert into tblFiles (FileName, FilePath) 
    values(@FileName, @FilePath); 

    if @@ERROR <> 0 
    begin 
     if @@TRANCOUNT > 0 ROLLBACK TRANSACTION 
     -- RAISE SOME ERROR - 
    end 

    -- I spouse tblFiles has some identity field as PICTURE_ID 
    -- use SCOPE_IDENTITY() to get it 

    insert into tblNews (newsTitle, newsDate, newsSummmary, newsContent, PICTURE_ID) 
    values(@newsTitle, @newsDate, @newsSummmary, @newsContent, scope_identity()); 

    if @@ERROR <> 0 
    begin 
     if @@TRANCOUNT > 0 ROLLBACK TRANSACTION 
     -- RAISE SOME ERROR - 
    end 

    -- finally commit the transaction 
    COMMIT TRANSACTION 
end 
+0

謝謝@mcNets!我將讀取存儲過程並對其進行測試:-)存儲過程在這裏可以更好地工作嗎? – cmp

+0

使用事務可以確保已插入兩個記錄或none。 – McNets

相關問題