Autor Beitrag
Vegeto
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Fr 05.10.12 15:31 
Hallo..

ich bekomme immer diese Fehlermeldung:
Zeichenfolgen- oder Binärdaten würden abgeschnitten.
Die Anweisung wurde beendet.


Ich habe schon einiges über das Problem gelsehen, doch irgendwie stimmt das nicht mit dem ein was ich habe.

Bin gerade dabei eine Excel Tabelle aus zulesen, mittels Interop.
Habe genau mit den selben Spalten eine SQL-Tabelle Re angelegt.
Dort habe ich JEDER (aus verzweiflungsgründen) Spalte, den Typ nchar(255) gegeben, trotzdem kommt dieser Fehler :/

Obwohl die Tabelle keine einzige Zelle hat die mehr als 100 char. hat :/

Hier ist mal ein Code von mir:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
// hier wird Excel geöffnet und Worksheet geladen

            object missing = Missing.Value;
            range = worksheet.UsedRange;

            SqlConnection conRe = new SqlConnection(ReConStr);
            conRe.Open();

            try
            {
                for (int i = 1; i < range.Rows.Count; i++)
                {
                    
                    Excel.Range rng1   = worksheet.get_Range("A" + i.ToString(), missing);
                    Excel.Range rng2   = worksheet.get_Range("B" + i.ToString(), missing);
                    Excel.Range rng3   = worksheet.get_Range("C" + i.ToString(), missing);
                    Excel.Range rng4   = worksheet.get_Range("D" + i.ToString(), missing);
                    Excel.Range rng5   = worksheet.get_Range("E" + i.ToString(), missing);
                    Excel.Range rng6   = worksheet.get_Range("F" + i.ToString(), missing);
                    Excel.Range rng7   = worksheet.get_Range("G" + i.ToString(), missing);
                    Excel.Range rng8   = worksheet.get_Range("H" + i.ToString(), missing);
                    Excel.Range rng9   = worksheet.get_Range("I" + i.ToString(), missing);
                    Excel.Range rng10  = worksheet.get_Range("J" + i.ToString(), missing);
                    Excel.Range rng11  = worksheet.get_Range("K" + i.ToString(), missing);
                    Excel.Range rng12  = worksheet.get_Range("L" + i.ToString(), missing);
                    Excel.Range rng13  = worksheet.get_Range("M" + i.ToString(), missing);
                    Excel.Range rng14  = worksheet.get_Range("N" + i.ToString(), missing);
                    Excel.Range rng15  = worksheet.get_Range("O" + i.ToString(), missing);

                    
                    string commandString = String.Format("INSERT INTO Re" +
                                      "(A,[B1],[B2],C,D,E,F,G,H,I,J,K,L,M,N;) Values" +
                                      "(@a,@b1,@b2,@c,@d,@e,@f,@g,@h,@i,@j,@k,@l,@m,@n)");

                    SqlCommand cmdRe = new SqlCommand(commandString,conRe);
                    cmdRe.Parameters.AddWithValue("@a" , rng1.ToString()   );
                    cmdRe.Parameters.AddWithValue("@b1", rng2.ToString()   );
                    cmdRe.Parameters.AddWithValue("@b2", rng3.ToString()   );
                    cmdRe.Parameters.AddWithValue("@c",  rng4.ToString()   );
                    cmdRe.Parameters.AddWithValue("@d",  rng5.ToString()   );
                    cmdRe.Parameters.AddWithValue("@e",  rng6.ToString()   );
                    cmdRe.Parameters.AddWithValue("@f",  rng7.ToString()   );
                    cmdRe.Parameters.AddWithValue("@g",  rng8.ToString()   );
                    cmdRe.Parameters.AddWithValue("@h",  rng9.ToString()   );
                    cmdRe.Parameters.AddWithValue("@i",  rng10.ToString()  );
                    cmdRe.Parameters.AddWithValue("@j",  rng11.ToString()  );
                    cmdRe.Parameters.AddWithValue("@k",  rng12.ToString()  );
                    cmdRe.Parameters.AddWithValue("@l",  rng13.ToString()  );
                    cmdRe.Parameters.AddWithValue("@m",  rng14.ToString()  );
                    cmdRe.Parameters.AddWithValue("@n",  rng15.ToString()  );

                    cmdRe.ExecuteNonQuery();


                }



Die SQLException taucht immer bei cmdRe.ExecuteNonQuery(); auf :/

Habe mal eine Zeile aus der Excel Tabelle per SQL-Anweisung bei SQL Server Managment eingefügt, da ging alles super. Ohne Probleme :/

Doch wenn ich das über Visual Studio mache, meckert er rum.

Hoffe jemand kann mir Helfen :)

Lg
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 05.10.12 16:11 
Liefert den ToString() überhaupt den Inhalt der Range? In den meisten Fällen liefert ToString() Debug informationen über die Klasse und nicht aufbereitet den Inhalt als string. Das ist eigentlich nur so bei den absoluten Basisdatentypen. Das sollte dir aber sofort auffallen wenn du mal den Programmablauf debuggst und dir den Variableninhalte anschaust.
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Fr 05.10.12 16:23 
Habe es aber auch mal mit Value2 ausprobiert, doch das hat auch nichts gebracht, habe diese Schleife aus dem Internet , und dort haben die es meistens so gemacht :/

Entwedert mit ToString oder beides zusammen oder mal nur ToString.

mit was muss ich das denn ersetzen?

lg
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 05.10.12 16:31 
Zitat:
mit was muss ich das denn ersetzen?


Keine Ahnung. Es ist aber ein leichtes wenn du das debuggst und dir den Inhalt der Range Objekte ansiehst. Dann solltest du ruckzuck finden welche die relevante ist.