0

データが入力された後、データベースから ID フィールド (PK) を「取得」しようとしています。ID を取得したら、それを別のテーブルに入力します (関係の目的で)。しかし、私の試みは失敗しています。

これは私が現在やっていることです:

int CompanyID;  

SqlConnection con = new SqlConnection("Data Source=******;Initial Catalog= ********");
SqlCommand cmd = con.CreateCommand();

con.Open();

cmd.CommandText = "insert into [Company Information] (Expo_Year, Partnership, Company_Name_Pub, Address_Pub, City_Pub, State_Pub, Zip_Pub, Phone_Pub, Fax_Pub, Email_Pub, Contact_Pub, Company_Name_Ex, Address_Ex, City_Ex, State_Ex, Zip_Ex, Phone_Ex, Fax_Ex, Email_Ex, Contact_Ex) VALUES (@Year, @Partnership,@PubCompanyName,@PubAddress,@PubCity,@PubState,@PubZip,@PubPhone,@PubFax,@PubEmail,@PubContact,@ExCompanyName,@ExAddress,@ExCity,@ExState,@ExZip,@ExPhone,@ExFax,@ExEmail,@ExContact) SELECT SCOPE_IDENTITY();";

SqlParameter param = new SqlParameter();
param.ParameterName = "@PubCompanyName";
param.Value = CompanyNmTxt.Text;

cmd.Parameters.Add("@Year", System.Data.SqlDbType.VarChar, 50).Value = Year.Text;
cmd.Parameters.Add("@Partnership", System.Data.SqlDbType.VarChar, 50).Value = DropDownList1.Text;
cmd.Parameters.Add("@PubCompanyName", System.Data.SqlDbType.VarChar,50).Value = CompanyNmTxt.Text;
cmd.Parameters.Add("@PubAddress", System.Data.SqlDbType.VarChar,50).Value = CompanyAddTxt.Text;
cmd.Parameters.Add("@PubCity", System.Data.SqlDbType.VarChar,50).Value = CompanyCtyTxt.Text;
cmd.Parameters.Add("@PubState", System.Data.SqlDbType.Char,2).Value = StateDD.Text;
cmd.Parameters.Add("@PubZip", System.Data.SqlDbType.Int,8).Value = CompanyZipTxt.Text;
cmd.Parameters.Add("@PubPhone", System.Data.SqlDbType.VarChar,50).Value = CompanyPhoneTxt.Text;
cmd.Parameters.Add("@PubFax", System.Data.SqlDbType.VarChar,50).Value = CompanyFaxTxt.Text;
cmd.Parameters.Add("@PubEmail", System.Data.SqlDbType.VarChar,50).Value = CompanyEmailTxt.Text;
cmd.Parameters.Add("@PubContact", System.Data.SqlDbType.VarChar,50).Value = CompanyContactTxt.Text;

cmd.Parameters.Add("@ExCompanyName", System.Data.SqlDbType.VarChar, 50).Value = ExCompanyNmTxt0.Text;
cmd.Parameters.Add("@ExAddress", System.Data.SqlDbType.VarChar, 50).Value = ExCompanyAddTxt0.Text;
cmd.Parameters.Add("@ExCity", System.Data.SqlDbType.VarChar, 50).Value = ExCompanyCtyTxt0.Text;
cmd.Parameters.Add("@ExState", System.Data.SqlDbType.Char, 2).Value = ExStateDD.Text;
cmd.Parameters.Add("@ExZip", System.Data.SqlDbType.Int, 8).Value = ExCompanyZipTxt0.Text;
cmd.Parameters.Add("@ExPhone", System.Data.SqlDbType.VarChar, 50).Value = ExCompanyPhoneTxt0.Text;
cmd.Parameters.Add("@ExFax", System.Data.SqlDbType.VarChar, 50).Value = ExCompanyFaxTxt0.Text;
cmd.Parameters.Add("@ExEmail", System.Data.SqlDbType.VarChar, 50).Value = ExCompanyEmailTxt0.Text;
cmd.Parameters.Add("@ExContact", System.Data.SqlDbType.VarChar, 50).Value = ExCompanyContactTxt0.Text;

CompanyID = (int)cmd.ExecuteScalar(); 
con.Close();

エラーが発生します:

InvalidCastException がユーザー コードによって処理されませんでした。指定されたキャストは無効です。

4

2 に答える 2

1

明らかなことは、郵便番号を整数として保存していることです。それらは実際には文字列である必要があります (先行ゼロが有効であるため)。次の行が原因である可能性があります。

cmd.Parameters.Add("@PubZip", System.Data.SqlDbType.Int,8).Value = CompanyZipTxt.Text;

次の行に沿って何かを試してみてください。

int companyZip;
Int32.TryParse(CompanyZipTxt.Text, out companyZip);

cmd.Parameters.Add("@PubZip", System.Data.SqlDbType.Int, 8).Value = companyZip;

同様の問題を持つ他のいくつかの行もあります。

于 2013-02-27T20:43:10.660 に答える
0

ExecuteScalarのドキュメントから:

戻り値の型: System.Object 結果セットの最初の行の最初の列、または結果セットが空の場合は null 参照 (Visual Basic では Nothing)。最大 2033 文字を返します。

表の最初の列には何がありますか? (おそらく、それは CompanyId 列です。)それは uniqueId ですか? それはintではなくGuidにキャストされます。

于 2013-02-27T20:55:46.313 に答える