C# 我能';不要在我的数据库中添加一行
我想将表格中的一行添加到数据库中,这是我用于该行的代码:C# 我能';不要在我的数据库中添加一行,c#,sql-server,winforms,C#,Sql Server,Winforms,我想将表格中的一行添加到数据库中,这是我用于该行的代码: private Connexion connexion = new Connexion(); private SqlDataAdapter daAuteur; private byte[] imgData; class Connexion { public DataSet ds = new DataSet(); public SqlConnection cnx =
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");
}
但它给了我一个错误:
字符串或二进制数据将被截断。声明已被终止
问题出在哪里?此错误意味着数据库中的一列(或多列)太小,无法包含您试图插入的文本。您需要确保字符串不太长,或者增加数据库中列的长度
如果没有更多信息,我无法再指出问题所在。截断错误意味着您尝试插入的数据太大,无法放入列中。您是否设置了可以向表列添加多少数据的限制?您还必须确保数据库中字段的
大小符合字符串参数长度
您可以使用子字符串方法
您在图像传输方面有问题
imgData = new ImageConverter().ConvertTo(auteurPhoto.Image, typeof(Byte[])) as Byte[];
row[12] = imgData == null ? DBNull.Value : imgData; //Adjust here
正如其他人所说,您遇到的正是错误所指出的:您试图输入的数据大于该列允许的数据
看看
请注意,它可以工作,但如果您将insert更改为6个字符,它将无法构建模式,原因与您所述的相同。我认为传递给SQL引擎的值为空或null,这会导致类似此错误的情况,请跟踪您的代码以找到其中一个为空的替换每一行[I]=
语句,具有类似于行[i]=“dummy”
或行所需的任何类型的伪语句。如果运行了,则将值逐个放回,然后查看是哪一个导致了故障。