我正在尝试从一个表中传输数据,但是我使用C#代码转换了几种类型。我输入了出现的错误图像。
private void button5_Click(object sender, EventArgs e)
{
try
{
//SORGENTE
string dbserver = textBox5.Text;
string dbname = textBox8.Text;
string dbusername = textBox7.Text;
string dbpassword = textBox6.Text;
SqlConnection conn = new SqlConnection("Data Source=" + dbserver + ";Initial Catalog=" + dbname + ";User ID=" + dbusername + ";Password=" + dbpassword + "");
conn.Open();
//PER QUERY PESANTI:
string queryset2 = "SET IDENTITY_INSERT Preventivi ON ";
SqlCommand myCommandset2 = new SqlCommand(queryset2, conn);
myCommandset2.ExecuteNonQuery();
//FINE QUERY PESANTI
SqlCommand cmd = new SqlCommand("SELECT IDPreventivo,IDCliente,Data,RiferimentoInterno,Note,Totale,CostoImpianto,SpeseGen,PercSpeseGen,Utile,PercUtile,Margine,PercMargine,Testata,Chiusura,CodiceFirma FROM Preventivi WHERE DittaPreventivo = '100Impianti'", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
String idpreventivo = null;
String idcliente = null;
String datacreazione = null;
String riferimentointerno = null;
String note = null;
String totaleimpianto = null;
String costoimpianto = null;
String spesegenerali = null;
String percentualespesegenerali = null;
String utile = null;
String percentualeutile = null;
String margine = null;
String percentualemargine = null;
String testata = null;
String chiusura = null;
String codicefirma = null;
//CONVERSIONI
foreach (DataRow dr in dt.Rows)
{
idpreventivo = dr["IDPreventivo"].ToString();
idcliente = dr["IDCliente"].ToString();
datacreazione = dr["Data"].ToString();
riferimentointerno = dr["RiferimentoInterno"].ToString();
note = dr["Note"].ToString();
totaleimpianto = dr["Totale"].ToString();
costoimpianto = dr["CostoImpianto"].ToString();
spesegenerali = dr["SpeseGen"].ToString();
percentualespesegenerali = dr["PercSpeseGen"].ToString();
utile= dr["Utile"].ToString();
percentualeutile = dr["PercUtile"].ToString();
margine = dr["Margine"].ToString();
percentualemargine = dr["PercMargine"].ToString();
testata = dr["Testata"].ToString();
chiusura = dr["Chiusura"].ToString();
codicefirma = dr["CodiceFirma"].ToString();
//Destinazione
string dbserver2 = textBox4.Text;
string dbname2 = textBox1.Text;
string dbusername2 = textBox2.Text;
string dbpassword2 = textBox3.Text;
SqlConnection conn2 = new SqlConnection("Data Source=" + dbserver2 + ";Initial Catalog=" + dbname2 + ";User ID=" + dbusername2 + ";Password=" + dbpassword2 + "");
conn2.Open();
//PER QUERY PESANTI:
string queryset3 = "SET IDENTITY_INSERT Preventivo ON ";
SqlCommand myCommandset3 = new SqlCommand(queryset3, conn2);
myCommandset3.ExecuteNonQuery();
//FINE QUERY PESANTI
string query2 = "INSERT INTO Preventivo (IdPreventivo,IdCliente,DataInserimento,RiferimentoInterno,Note,Totale,CostoImpianto,SpeseGenerali,PercentualeSpeseGenerali,Utile,PercentualeUtile,Margine,PercentualeMargine,Testata,Chiusura,CodiceFirma) VALUES(@IdPreventivo,@IdCliente,@DataInserimento,@RiferimentoInterno,@Note,@Totale,@CostoImpianto,@SpeseGenerali,@PercentualeSpeseGenerali,@Utile,@PercentualeUtile,@Margine,@PercentualeMargine,@Testata,@Chiusura,@CodiceFirma)";
SqlCommand myCommand = new SqlCommand(query2, conn2);
int idp = System.Convert.ToInt32(idpreventivo);
myCommand.Parameters.AddWithValue("@IdPreventivo", idp);
int idc = System.Convert.ToInt32(idcliente);
myCommand.Parameters.AddWithValue("@IdCliente", idc);
myCommand.Parameters.AddWithValue("@DataInserimento", datacreazione);
decimal totimp = System.Convert.ToDecimal(totaleimpianto);
myCommand.Parameters.AddWithValue("@Totale", totimp);
decimal costimp = System.Convert.ToDecimal(costoimpianto);
myCommand.Parameters.AddWithValue("@CostoImpianto", costimp);
decimal speseimp = System.Convert.ToDecimal(spesegenerali);
myCommand.Parameters.AddWithValue("@SpeseGenerali", speseimp);
decimal perspeseimp = System.Convert.ToDecimal(percentualespesegenerali);
myCommand.Parameters.AddWithValue("@PercentualeSpeseGenerali", perspeseimp);
decimal ut = System.Convert.ToDecimal(utile);
myCommand.Parameters.AddWithValue("@Utile", ut);
decimal perut = System.Convert.ToDecimal(percentualeutile);
myCommand.Parameters.AddWithValue("@PercentualeUtile", perut);
decimal mar = System.Convert.ToDecimal(margine);
myCommand.Parameters.AddWithValue("@Margine", mar);
decimal permar = System.Convert.ToDecimal(percentualemargine);
myCommand.Parameters.AddWithValue("@PercentualeMargine", permar);
myCommand.Parameters.AddWithValue("@Testata", testata);
myCommand.Parameters.AddWithValue("@Chiusura", chiusura);
int codf = Int32.Parse(codicefirma.ToString());
myCommand.Parameters.AddWithValue("@CodiceFirma", codf);
myCommand.Parameters.AddWithValue("@RiferimentoInterno", riferimentointerno);
myCommand.Parameters.AddWithValue("@Note", note);
myCommand.ExecuteNonQuery();
conn2.Close();
//fine destinazione
}
// textBox9.Text = val.ToString();
//MessageBox.Show(val);
MessageBox.Show("Dati Esportati ");
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(" " + ex);
}
}
错误是:
SQL Server表结构:
CREATE TABLE [dbo].[Preventivi]
(
[IDPreventivo] [int] IDENTITY(1,1) NOT NULL,
[Data] [datetime] NOT NULL,
[RiferimentoInterno] [varchar](50) NOT NULL,
[IDCliente] [int] NOT NULL,
[IDProgettista] [int] NULL,
[Contatto] [varchar](50) NOT NULL,
[Stato] [varchar](50) NOT NULL,
[TipoFornitura] [varchar](50) NOT NULL,
[Note] [varchar](500) NOT NULL,
[DirettoreLavori] [varchar](50) NOT NULL,
[CostoImpianto] [decimal](18, 2) NOT NULL,
[PercSpeseGen] [decimal](9, 2) NOT NULL,
[SpeseGen] [decimal](18, 2) NOT NULL,
[PercUtile] [decimal](9, 2) NOT NULL,
[Utile] [decimal](18, 2) NOT NULL,
[PercMargine] [decimal](9, 2) NOT NULL,
[Margine] [decimal](18, 2) NOT NULL,
[Totale] [decimal](18, 2) NOT NULL,
[FlagCalcoloUtile] [char](1) NOT NULL,
[Testata] [varchar](5000) NOT NULL,
[Chiusura] [varchar](5000) NOT NULL,
[CodiceFirma] [int] NOT NULL,
[Firma] [image] NULL,
[DittaPreventivo] [varchar](50) NULL,
[Testata1] [varchar](5000) NOT NULL,
[Chiusura1] [varchar](5000) NOT NULL,
[IDtemp] [varchar](100) NULL,
)
CREATE TABLE [dbo].[Preventivo]
(
[IdPreventivo] [int] IDENTITY(1,1) NOT NULL,
[IdCliente] [int] NULL,
[RiferimentoInterno] [varchar](60) NULL,
[Note] [varchar](200) NULL,
[DataInserimento] [datetime] NULL,
[Stato] [varchar](20) NULL,
[DataAccettazione] [datetime] NULL,
[Totale] [decimal](18, 5) NULL,
[CostoImpianto] [decimal](18, 5) NULL,
[SpeseGenerali] [decimal](18, 5) NULL,
[PercentualeSpeseGenerali] [decimal](18, 5) NULL,
[Utile] [decimal](18, 5) NULL,
[PercentualeUtile] [decimal](18, 5) NULL,
[Margine] [decimal](18, 5) NULL,
[PercentualeMargine] [decimal](18, 5) NULL,
[Testata] [varchar](255) NULL,
[Chiusura] [varchar](255) NULL,
[CodiceFirma] [int] NULL,
)
答案 0 :(得分:2)
除此之外,在第一个表中,您有
[Testata1] [varchar](5000) NOT NULL,
[Chiusura1] [varchar](5000) NOT NULL,
在第二个表格中,您有
[Testata] [varchar](255) NULL,
[Chiusura] [varchar](255) NULL,
如果有一行Testata1值超过255个字符,它就不适合Testata并且会给你"字符串或二进制数据将被截断"错误。
你必须确保你要插入到新表中的内容适合那里。
答案 1 :(得分:0)
我相信以下声明是使用字符串变量添加日期参数。并且它看起来参数的值不符合SQL所期望的日期格式。请将变量“datacreazione”转换为c#中的datetime对象,并将其作为参数传递给SQL。
myCommand.Parameters.AddWithValue("@DataInserimento", datacreazione);
也许您可以尝试以下
DateTime creationDate;
string[] formats = { "dd/MM/yyyy", "dd/M/yyyy", "d/M/yyyy", "d/MM/yyyy",
"dd/MM/yy", "dd/M/yy", "d/M/yy", "d/MM/yy"};
DateTime.TryParseExact(datacreazione, formats,
System.Globalization.CultureInfo.InvariantCulture,
DateTimeStyles.None, out creationDate)
myCommand.Parameters.AddWithValue("@DataInserimento", creationDate);
OR
您也可以像这样更改sql语句的读取部分
DateTime datacreazione;
for
{
...
datacreazione = dr["Data"]
}