を動作しません。私はあなたがプログラムを起動し、データベースを作成し、アプリを作成していますし、私が作る最初のスクリプトはこれです:更新は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%);";
これで動作します。 問題はディスク上のログファイル領域でした。
渡されたパラメータの型とサイズを正確に指定できる、ParametersコレクションのAddメソッドオーバーロードを使用することをお勧めします。このようにして、これらのTEXTパラメータのすべてをより詳細に制御できます。 – Steve