0

自動インクリメント ID を使用した Web サービス メソッドに問題があります。データベースにテーブルがあります: tableExam

PK - IDExam - int - auto increment
---- ExamName - string
---- ExamGrade - int

次に、Web サービス メソッドを作成します。

[WebMethod]
public void addExam(int IDExam, string ExamName, int ExamGrade)
{
    Exam e = new Exam{
    ExamName = ExamName,
    ExamGrade = ExamGrade};
}

それを自分のフォームに使用します。送信ボタンをクリックすると、次のように実行されます。

sampleWS s = new sampleWS();
s.addExam(bla, bla, bla);

現在、主キーを設定できないというエラーが表示されています。

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Data.SqlClient.SqlException: Cannot insert explicit value for identity column in table 'tableExam' when IDENTITY_INSERT is set to OFF.
  at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
  at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
  at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
  at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
  at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
  at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
  at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
  at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
  at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
  at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
  at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
  at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
  at System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicInsert(TrackedObject item)
  at System.Data.Linq.ChangeDirector.StandardChangeDirector.Insert(TrackedObject item)
  at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
  at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
  at System.Data.Linq.DataContext.SubmitChanges()

Web サービスを次のように変更しようとしています。

[WebMethod]
public void addExam(string ExamName, int ExamGrade)
{
    Exam e = new Exam{
    ExamName = ExamName,
    ExamGrade = ExamGrade};
}

今でもエラーがあります:

ObjectDataSource 'ObjectDataSourceP' は、パラメーターを持つ非ジェネリック メソッド 'addExam' を見つけることができませんでした: IDExam、ExamName、ExamGrade。

では、自動インクリメント PK ID でこの WS メソッドを使用するにはどうすればよいですか?

4

2 に答える 2

0

私があなたの例外を見た場合、使用しているdalコードを教えてください。IDにIDがあり、IDに間違った値を与えていることがわかります。IDは自動的に追加されます。Examid を設定する必要はありません。エラーは Webmethod ではなくクエリにあります。

于 2012-04-20T17:52:49.860 に答える
0

に変更

sampleWS s = new sampleWS();
s.addExam(100000000, bla, bla);

そしてそれは動作します..

ご参加ありがとうございました...

于 2012-04-27T15:49:48.730 に答える