2016-04-26 6 views
0

を動作しません。私はあなたがプログラムを起動し、データベースを作成し、アプリを作成していますし、私が作る最初のスクリプトはこれです:更新はC#とSQLサーバー

public void updateAttachment(String PID) 
{ 
    String connection = Constants.localServerConnectionSQL.LocalServerConnectionSQLName; 
    SqlConnection Connection = new SqlConnection(); 

    Connection = new SqlConnection(connection); 
    Connection.Open(); 

    Connection.ChangeDatabase(PID); 

    string script = @"CREATE PROCEDURE updateAttachment 
    @ATID TEXT, @NAME TEXT,@CPID TEXT, 
    @CREATORID text,@B64CONTENT text, 
    @FILESIZE int,@SERVEROFFLINE int, 
    @ISFAVOURITE int,@LASTOPENDATE date 
    AS UPDATE dbo.ATTACHMENT 
     SET NAME = @NAME, ATID = @ATID, CPID = @CPID, 
      CreatorID = @CREATORID,B64CONTENT = @B64CONTENT, 
      FILESIZE = @FILESIZE,SERVEROFFLINE = @SERVEROFFLINE, 
      ISFAVOURITE = @ISFAVOURITE, 
      LASTOPENDATE = @LASTOPENDATE 
     WHERE ATID LIKE @ATID"; 
    SqlCommand command = new SqlCommand(script, Connection); 

    try 
    { 
     command.ExecuteNonQuery(); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 

そして私「この方法を使用してストアドプロシージャの使用をコールするつもり:

public void updateAttachments(String PID, AttachmentDownload attachment) 
{ 
    using (SqlConnection conn = new SqlConnection(Constants.localServerConnectionSQL.LocalServerConnectionSQLName)) 
    { 
     conn.Open(); 
     conn.ChangeDatabase(PID); 
     SqlCommand cmd = new SqlCommand("dbo.updateAttachment", conn); 

     cmd.CommandType = CommandType.StoredProcedure; 


     cmd.Parameters.Add(new SqlParameter("@CPID", attachment.CPID)); 
     cmd.Parameters.Add(new SqlParameter("@NAME", attachment.Name)); 
     cmd.Parameters.Add(new SqlParameter("@ATID", attachment.ATID)); 
     cmd.Parameters.Add(new SqlParameter("@CREATORID", attachment.CreatorID)); 
     cmd.Parameters.Add(new SqlParameter("@B64CONTENT", attachment.B64Content)); 
     cmd.Parameters.Add(new SqlParameter("@FILESIZE", attachment.FileSize)); 
     cmd.Parameters.Add(new SqlParameter("@SERVEROFFLINE", attachment.ServeOffline)); 
     cmd.Parameters.Add(new SqlParameter("@ISFAVOURITE", attachment.IsFavourite)); 
     cmd.Parameters.Add(new SqlParameter("@LASTOPENDATE", attachment.LastOpenDate)); 

     try 
     { 
      cmd.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      log.Info("Errore di scrittura Store Procedure: insertMeetings - Errore.: " + ex.Message); 
      throw ex; 
     }  
    } 
} 

しかし、私は、スクリプトを起動したとき、私はエラーのいずれかの種類によってませんが、それでも私は、レコードを更新していないよ...どこATID attachment.ATIDに等しい。 SQL Server言語が間違っていますか?

UPDATE 私は、WHERE ATID LIKE @ATIDでATID LIKE '@ATID' 引用符を削除するが、私はこのエラーを持っている:

The transaction log for database 'mydbname' is full due to 'ACTIVE_TRANSACTION'

それが解決する方法?

- 解決しよう/ SOLUTION -

作成データベースのスクリプト:私は

"SIZE = 3MB, MAXSIZE = 10MB" 

"SIZE = 1MB, MAXSIZE = 5MB" 

からスクリプトDB作成を変更した

String str = "CREATE DATABASE [" + PID + "] ON PRIMARY (NAME = MyDatabase_Data, FILENAME = '" + Path + ".mdf', SIZE = 10MB, MAXSIZE = 15MB, FILEGROWTH = 10%) LOG ON (NAME = [" + PID + "Log_Log], FILENAME = '"+Path+ "Log.ldf', SIZE = 3MB, MAXSIZE = 10MB, FILEGROWTH = 10%);"; 

これで動作します。 問題はディスク上のログファイル領域でした。

+0

渡されたパラメータの型とサイズを正確に指定できる、ParametersコレクションのAddメソッドオーバーロードを使用することをお勧めします。このようにして、これらのTEXTパラメータのすべてをより詳細に制御できます。 – Steve

答えて

0

WHERE ATID LIKE '@ATID'"の周りに締め値を付ける必要はありません。一重引用符を削除すると良いですか?

+0

私はこのエラーがあります。データベース 'mydbname'のトランザクションログは 'ACTIVE_TRANSACTION'のためにいっぱいです。 –

+0

スティーブの提案を試してみたら、[this](http://stackoverflow.com/questions/17674973/the-transaction-log-for-the-database-is-full)の回答を見て、提供されたソリューションはあなたのために働きます。 –

+0

私は解決して、私は解決策で私の質問を更新しました...ありがとう –

関連する問題