@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

SQL更新時のエラーについて

1
投稿者投稿内容
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2009-01-09 09:59
お世話になります。長文ですみませんがアドバイスください。
ASP.NET C# です。

SQLに書き込む(UPDATE)のときに下記のようなエラーが出ます。
どうしたら更新可能になるか教えてください。
エラーメッセージ
「例外の詳細: System.Data.SqlClient.SqlException: 'nvarchar' 付近に不適切な構文があります。」

SqlDataSource2_Updating() がGridViewから更新のために呼ばれているときは、データは、正しく対象のデータのみ呼ばれて値が代入されています。ここを抜けると上記エラーとなり更新できません。
下記のコードに示した初期の更新に関して(ファイルAからB作成)は、問題なく更新されています。GridView からの更新ボタンによる更新がうまくいきません。


テーブルの定義は、項目を「varchar(xx)」で指定しています。

ここで、通常と違う処理として、@ページ表示時にAファイルからデータを読みBファイルを更新(UPDATE)、不足データは、(INSERT)処理をしてからAGridView に表示させています。

@の更新などの処理は、
if (!IsPostBack){ で初期のみ下記の更新をしています。

コード:

foreach (SystemMyData stMember in smd)//[cnt]
{
if (!string.IsNullOrEmpty(stMember.UserName))
{
int nIsUser = 0;
for (int i = 0; i < UserData.Length; ++i)
{
if (stMember.UserName == UserData[i].UserID)
{
nIsUser = 1;
Session["SetteiUsermeiData"] = string.Format("{0}:{1}:{2}:{3}:{4}", UserData[i].UserID, stMember.UserPassword,
UserData[i].UserDisplayName, UserData[i].UserSort, stMember.Email);
SqlDataSource2.Update();
}
}
// 顧客が見つからなかったとき。(たぶん新規)
if (nIsUser == 0)
{
Session["SetteiUsermeiData"] = string.Format("{0}:{1}:{2}:{3}:{4}", stMember.UserName, stMember.UserPassword,
"", "", stMember.Email);
SqlDataSource2.Insert();
}
}
}
:
:
protected void SqlDataSource2_Inserting(object sender, SqlDataSourceCommandEventArgs e)
{
// INSERT INTO SlSecureWord(UserID, UserPassword, UserDisplayName, UserSort, [E-mail])
VALUES (@UserID, @UserPassword, @UserDisplayName, @UserSort, @Email)

string mem = (string)Session["SetteiUsermeiData"];
string[] md = mem.Split(':');

e.Command.Parameters["@UserID"].Value = md[0];
e.Command.Parameters["@UserPassword"].Value = md[1];
e.Command.Parameters["@UserDisplayName"].Value = md[2];
e.Command.Parameters["@UserSort"].Value = md[3];
e.Command.Parameters["@Email"].Value = md[4];
}

protected void SqlDataSource2_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
// UPDATE SlSecureWord SET UserPassword = @UserPassword, UserDisplayName = @UserDisplayName,
UserSort = @UserSort, [E-mail] = @Email WHERE (UserID = @UserID)

string mem = (string)Session["SetteiUsermeiData"];
string[] md = mem.Split(':');

e.Command.Parameters["@UserID"].Value = md[0];
e.Command.Parameters["@UserPassword"].Value = md[1];
e.Command.Parameters["@UserDisplayName"].Value = md[2];
e.Command.Parameters["@UserSort"].Value = md[3];
e.Command.Parameters["@Email"].Value = md[4];
}




[ メッセージ編集済み 編集者: SL 編集日時 2009-01-09 10:01 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2009-01-09 11:39
SQL Server Profilerを使う等して実際にどのようなSQL文が発行されているのかを確認し、その原因となる箇所を探すのがよさそうですね。
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2009-01-09 13:33
お世話になります。

> SQL Server Profiler
これが見つかりません。開発環境は、VS2005 です。
また、SQLは、Express Edition で SQL Server Management Studio Express です。
この、Management Studio 内のツールメニュにも見つかりません。
あるのは、「外部ツール」「ユーザー設定」「オプション」のみです。
http://www.atmarkit.co.jp/fwin2k/operation/sql2005ov03/sql2005ov03_04.html
などあり有用に思いますが、どうやって起動しますか?
教えてください。
なかむら
ベテラン
会議室デビュー日: 2008/11/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2009-01-09 13:46
SQL Server 2005 Express Edition には
SQL Server Profiler が付属していないようです。

オープンソースの Profiler があるので、
それを利用してはどうでしょうか?

「SQL Express Profiler」
http://code.google.com/p/sqlexpressprofiler/

利用方法はこちらを参考にしてください。

http://www.atmarkit.co.jp/fdotnet/dotnettips/744sqlexpressprofiler/sqlexpressprofiler.html
_________________
Nakamura Blog
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2009-01-09 15:11
お世話になります。

結論からいって回復しました。原因など不明です。理由は、色々あれやこれややってるうちに間違って GridView を消してしまい、再度作りこむことになって以前の現象が出なくなりました。

SQL Server Profiler について今後役に立ちそうなのでダウンロードし動かそうとしていますが、「run」ボタンを押すと下記のメッセージが出てトレースできません。
ここのリンクを見ても(たぶんこのページのID108)実行権限がない以外は、単にエラーの発生した場所のようだし.....
使用パソコンは、 Vista Home Premium です。

動かないので推測ですが、これって VC++ の Spy みたいにメッセージみたいなのを
追っかけていけるのですか?
教えてください。


「version: 0.1.468.59
exception: System.Data.SqlClient.SqlException: 'SYS.TRACES' の実行権限がありません。」
1

スキルアップ/キャリアアップ(JOB@IT)