-3

私は得ています

「表のID列の明示的な値は、列リストが使用され、IDENTITY_INSERTがONの場合にのみ指定できます。」

ID を指定するかどうかに関係なく、まったく同じエラーが発生します。ID を指定したくありません。少なくとも見える場所には挿入しません。これが私の(編集、jcolebrand)「関連する」C#コードです:

SqlConnection con = new SqlConnection(strcon);
this.getControls(this.Controls);

con.Open();

/* jcolebrand moved the sql query text further down, it's long */

SqlCommand cmd = new SqlCommand(query, con);

cmd = getVals(cmd);

cmd.Parameters.AddWithValue("event_link", DBNull.Value);
cmd.Parameters.AddWithValue("event_approved", DBNull.Value);
cmd.Parameters.AddWithValue("event_in_csi", DBNull.Value);
cmd.Parameters.AddWithValue("event_in_website", DBNull.Value);
cmd.Parameters.AddWithValue("date_added", DateTime.Now.ToString());
cmd.Parameters.AddWithValue("event_start_time1", DBNull.Value);

cmd.Parameters.AddWithValue("event_end_time1", DBNull.Value);

cmd.Parameters.AddWithValue("program", DBNull.Value);
cmd.Parameters.AddWithValue("event_owner", DBNull.Value);


cmd.ExecuteNonQuery();

con.Close(); 

String query = @"INSERT INTO [rec_serv].[dbo].[recserv_event1] (
                      event_name
                    , event_category
                    , event_location
                    , event_instructor
                    , event_start_date
                    , event_end_date
                    , event_start_time
                    , event_end_time
                    , event_deadline
                    , member_fee
                    , non_member_fee
                    , email
                    , registration
                    , minimum_size
                    , maximum_size
                    , waiting_list
                    , event_detail
                    , monday
                    , tuesday
                    , wednesday
                    , thursday
                    , friday
                    , saturday
                    , sunday
                    , number_handout
                    , color_handout
                    , size_handout
                    , number_poster
                    , color_poster
                    , size_poster
                    , listserv
                    , news_release
                    , web_banner
                    , visix_ad
                    , desired_displayed_date
                    , other1
                    , other2
                    , comment
                    , event_link
                    , event_approved
                    , event_in_csi
                    , event_in_website
                    , date_added
                    , extracomment
                    , receiptinfo
                    , program
                    , event_owner
                    , event_start_time1
                    , event_end_time1
                ) VALUES (
                    @event_name, 
                    @event_category, 
                    @event_location, 
                    @event_instructor, 
                    @event_start_date, 
                    @event_end_date, 
                    @event_start_time, 
                    @event_end_time, 
                    @event_deadline, 
                    @member_fee, 
                    @non_member_fee, 
                    @email, 
                    @registration, 
                    @minimum_size, 
                    @maximum_size,
                    @waiting_list, 
                    @event_detail, 
                    @monday, 
                    @tuesday, 
                    @wednesday, 
                    @thursday, 
                    @friday, 
                    @saturday,
                    @sunday, 
                    @number_handout, 
                    @color_handout, 
                    @size_handout, 
                    @number_poster, 
                    @color_poster, 
                    @size_poster, 
                    @listserv, 
                    @news_release, 
                    @web_banner, 
                    @visix_ad, 
                    @desired_displayed_date, 
                    @other1, 
                    @other2, 
                    @comment, 
                    @event_link, 
                    @event_approved, 
                    @event_in_csi,
                    @event_in_website,
                    @date_added,
                    @extracomment,
                    @receiptinfo,
                    @program,
                    @event_owner,
                    @event_start_time1,
                    @event_end_time1
);"
4

4 に答える 4

4

SQL で可能な場合は、明示的な列を使用する必要があります。したがって、このクエリでは、クエリの形式を次のように変更します。

INSERT INTO table (column1, column2, ...) VALUES (value1, value2...);

これは、アプリケーションと SQL データベース間のコントラクトをより明確に定義し、将来の変更を可能にするため、重要です。

于 2012-05-31T21:00:27.843 に答える
2

Mithrandir が述べたように、列リストを指定していません。ID 列は最初の列なので、なぜ を渡すの@event_nameですか? これが、エラーが発生する理由です。ID 列の値を に設定しようとしていますが@event_name、これはいくつかのレベルで正しくありません。修正は、前に列リストを渡すようにすることですVALUES

于 2012-05-31T21:00:34.927 に答える
1

挿入によってどのフィールドが設定されるかは、値によって決定されるのではなく、クエリで指定するフィールドによって決定されます。フィールドをまったく指定していないため、デフォルトはすべてのフィールドです。

ID フィールドを避けることができるように、フィールドを指定します。

INSERT INTO table (
  event_name, event_category, event_in_website, date_added, extracomment,
  recipientinfo, program, event_owner, event_start_time1, event_end_time1
) VALUES (
  @event_name, @event_category, @event_in_website, @date_added, @extracomment,
  @receiptinfo, @program, @event_owner, @event_start_time1, @event_end_time1
)
于 2012-05-31T21:02:02.023 に答える
0

クエリを実行する前に、「SET IDENTITY_INSERT [dbo].[recserv_event1] ON」を実行します。

例えば

con.Open(); 
var query =  "SET IDENTITY_INSERT [dbo].[recserv_event1] ON";
SqlCommand cmd = new SqlCommand(query, con); 
cmd.ExecuteNonQuery(); 

query = "Your insert statment.";
cmd.ExecuteNonQuery(); 

con.Close();
于 2012-05-31T22:03:05.310 に答える