0

フォームからデータベースに行を追加したいのですが、これは私が使用したコードです:

private Connexion connexion = new Connexion();
private SqlDataAdapter daAuteur;
private byte[] imgData;

     class Connexion
        {
            public DataSet ds = new DataSet();
            public SqlConnection cnx = new SqlConnection("Data Source=MAC-BOOK-AIR;Initial Catalog=Gestion_bib;Integrated Security=True");

    }

    private void AjoutAuteur_Load(object sender, EventArgs e)
            {
                InitializeOpenFileDialog();
                daAuteur = new SqlDataAdapter("select * from Auteur", connexion.cnx);
                daAuteur.Fill(connexion.ds, "Auteur");
            }

     private void AjoutAuteur_Load(object sender, EventArgs e)
            {
                InitializeOpenFileDialog();
                daAuteur = new SqlDataAdapter("select * from Auteur", connexion.cnx);
                daAuteur.Fill(connexion.ds, "Auteur");
            }

      private void ajouterNewBook_Click(object sender, EventArgs e)
            {
                DataRow row = connexion.ds.Tables["Auteur"].NewRow();
                row[1] = String.IsNullOrEmpty(nomAuteurBox.Text) ?
                    DBNull.Value :
                    nomAuteurBox.Text as Object;
                row[2] = String.IsNullOrEmpty(prenomAuteurBox.Text) ?
                    DBNull.Value :
                    prenomAuteurBox.Text as Object;
                row[3] = String.IsNullOrEmpty(nomAuteurBox.Text) ?
                    DBNull.Value :
                    dateDeNaissanceAuteurBox.Text as Object;
                row[4] = String.IsNullOrEmpty(lieuDeNaissanceAuteurBox.Text) ?
                    DBNull.Value :
                    lieuDeNaissanceAuteurBox.Text as Object;
                row[5] = String.IsNullOrEmpty(nationaliteAuteurBox.Text) ?
                    DBNull.Value :
                    nationaliteAuteurBox.Text as Object;
                if (decesCheckBox.Checked)
                {
                    row[6] = true;
                    row[7] = String.IsNullOrEmpty(dateDecesAuteurBox.Text) ?
                    DBNull.Value :
                    dateDecesAuteurBox.Text as Object;
                    row[8] = String.IsNullOrEmpty(lieuDecesAuteurBox.Text) ?
                        DBNull.Value :
                        lieuDecesAuteurBox.Text as Object;
                }
                else
                {
                    row[6] = false;
                    row[7] = DBNull.Value;
                    row[8] = DBNull.Value;
                }
                row[9] = String.IsNullOrEmpty(periodeAuteurBox.Text) ?
                    DBNull.Value :
                    periodeAuteurBox.Text as Object;
                row[10] = String.IsNullOrEmpty(resumeAuteurBox.Text) ?
                   DBNull.Value :
                   resumeAuteurBox.Text as Object;
                row[11] = String.IsNullOrEmpty(lien1Box.Text) ?
                   DBNull.Value :
                   lien1Box.Text as Object;

                imgData = new ImageConverter().ConvertTo(auteurPhoto.Image, typeof(Byte[])) as Byte[];
                row[12] = imgData == null ?
                   DBNull.Value :
                   imgData as Object;
                connexion.ds.Tables["Auteur"].Rows.Add(row);

                SqlCommandBuilder cmb = new SqlCommandBuilder(daAuteur);
                daAuteur.Update(connexion.ds, "Auteur");
            }

しかし、それは私にこのエラーを与えます:

文字列型やバイナリは省略されます。ステートメントは終了されました

問題はどこだ ?

4

4 に答える 4

3

size on fieldまた、データベース内が適合していることを確認する必要があります。string parameter length

を使用して行コンテンツのサイズを修正できますSubString method

画像の転送に問題がある

imgData = new ImageConverter().ConvertTo(auteurPhoto.Image, typeof(Byte[])) as Byte[];
row[12] = imgData == null ? DBNull.Value : imgData; //Adjust here
于 2012-09-20T13:27:47.473 に答える
2

このエラーは、データベース内の 1 つ (または複数) の列が小さすぎて、挿入しようとしているテキストを格納できないことを意味します。文字列が長すぎないようにするか、データベース内の列の長さを増やす必要があります。

これ以上の情報がなければ、問題を特定することはできません。

于 2012-09-20T13:23:53.460 に答える
2

他の人が言ったように、エラーが述べていることを正確に実行しています。入力しようとしているデータは、列で許可されているものよりも大きいです。

このsqlfiddleを見てください

機能することに注意してください。ただし、挿入を 6 文字に変更すると、前述と同じ理由でスキーマの構築に失敗します。

于 2012-09-20T13:30:37.017 に答える
0

この切り捨てエラーは、挿入しようとしているデータが大きすぎて列に収まらないことを意味します。テーブルの列に追加できるデータ量に制限を設定しましたか?

于 2012-09-20T13:24:02.087 に答える