[ad_1]
インターフェイスを通じて値を追加しようとすると、次のエラーが発生します: System.Data.SqlClient.SqlException: ‘列名または指定された値の数がテーブル定義と一致しません。’
私が試したこと:
C#
private void button1_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection("Data Source=OPCOSQL\\OPCOSQL;Initial Catalog=OPCO-SQL;Integrated Security=True;Pooling=False"); con.Open(); SqlCommand cmd = new SqlCommand("insert into [Table] values(@Utilizador,@Nome,@Disco,@Processador,@Memória,@Tipo,@Localização)", con); cmd.Parameters.AddWithValue("@Utilizador", textBox1.Text); cmd.Parameters.AddWithValue("@Nome", textBox2.Text); cmd.Parameters.AddWithValue("@Disco", textBox3.Text); cmd.Parameters.AddWithValue("@Processador", textBox4.Text); cmd.Parameters.AddWithValue("@Memória", textBox5.Text); cmd.Parameters.AddWithValue("@Tipo", textBox6.Text); cmd.Parameters.AddWithValue("@Localização", textBox7.Text); cmd.ExecuteNonQuery(); con.Close(); }
SQL
CREATE TABLE [dbo].[Table] ( [AssetNumber] INT NOT NULL IDENTITY, [Utilizador] VARCHAR(50) NULL, [Nome] VARCHAR(50) NULL, [Disco] VARCHAR(50) NULL, [Processador] VARCHAR(50) NULL, [Memória] VARCHAR(50) NULL, [Tipo] VARCHAR(50) NULL, [Localização] VARCHAR(50) NULL, CONSTRAINT [PK_Table] PRIMARY KEY ([AssetNumber]) );
解決策 2
INSERT コマンドに列名をリストしません。
SQL
INSERT INTO MyTable VALUES ( ... )
したがって、すべての列に値が必要です。これは、エンジンが最後に実行された CREATE または ALTER テーブルの列順序で値を挿入しようとすることを意味します。
後続の ALTER TABLE ステートメントによってそれが変更され、データベースの整合性が損なわれる可能性があるため、これは悪い考えです。
この場合、最初の列が IDENTITY 列であり、そこにまったく書き込むことができないため、状況はさらに悪くなります。
パラメーターが指定される順序で列をリストすると、機能し、将来の保証になります。
SQL
INSERT INTO MyTable (Column1, Column2, ... ) VALUES ( ... )
新しいコードを提供した後:
SSMS でコードを試してみると:
SQL
CREATE TABLE [dbo].[Table] ( [AssetNumber] INT NOT NULL IDENTITY, [Utilizador] VARCHAR(50) NULL, [Nome] VARCHAR(50) NULL, [Disco] VARCHAR(50) NULL, [Processador] VARCHAR(50) NULL, [Memória] VARCHAR(50) NULL, [Tipo] VARCHAR(50) NULL, [Localização] VARCHAR(50) NULL, CONSTRAINT [PK_Table] PRIMARY KEY ([AssetNumber])
SQL
insert into dbo.[Table] ([Utilizador], [Nome], [Disco], [Processador], [Memória], [Tipo], [Localização]) values ('@Utilizador', '@Nome', '@Disco', '@Processador', '@Memória', '@Tipo', '@Localização')
その後、完全に挿入され、その後テーブルにクエリを実行すると、期待どおりのものが得られます。
1 @Utilizador @Nome @Disco @Processador @Memória @Tipo @Localização
それで…SSMSから始めて、正しいDB、正しいテーブルを使用していること、そして列があなたが示したCREATEステートメントと一致していることを確認してください。
解決策 1
8 つの列を持つテーブルに 7 つの値を挿入しようとしています。
ただし、最初の列に値を挿入することはできません。 IDENTITY
桁。
変更してください INSERT
ステートメントを使用して、挿入先の列を明示的に指定します。
SQL
insert into [Table] ([Utilizador], [Nome], [Disco], [Processador], [Memória], [Tipo], [Localização]) values (@Utilizador, @Nome, @Disco, @Processador, @Memória, @Tipo, @Localização)
[ad_2]
コメント