Fehler beim konvertieren von Datentyp varchar in int (gespeicherte Prozedur C# ASP.NET)
Ich bin neu in C# und ich arbeite an einem Projekt, wo Sie rufen Sie gespeicherte Prozeduren aus sql-Datenbank in asp.net C#.
In meiner Tabelle, die 'ID' verwendet varchar-Datentyp.
immer wenn ich die ID in ein Textfeld ein und klicken Sie auf den suchen-button, einen Fehler erzeugen,
- System.Daten.SqlClient.SqlException: Fehler beim konvertieren von Datentyp varchar in int.*
Ich habe gegangen durch den code immer und immer wieder aber ich kann nicht sehen den Fehler.
Freundlicherweise unterstützen.
Danke.
MYCODE
string connString2 = "Data Source=EFTSRV4;Initial Catalog=PaySwitch;Integrated Security=True";
SqlConnection con = new SqlConnection(connString2);
con.Open();
SqlCommand cmd = new SqlCommand("GetMemberDetailsByID", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetMemberDetailsByID";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
cmd.Parameters.Add("@MBID", SqlDbType.VarChar).Value = (txtSearch.Text.Trim());
cmd.ExecuteNonQuery();
cmd.Connection = con;
//da.Fill(ds, "Members");
//(SqlDbType.Int).Parse(da.RowUpdated[0]["@MBID"]);
//Mobileno = Convert.ToInt32(txmobileno.Text);
//cmd.Parameters.Add("@MBID", SqlDbType.Int).Value = (txtSearch.Text.Trim());
try
{
dg_Data.EmptyDataText = "No Records Found";
dg_Data.DataSource = cmd.ExecuteReader();
dg_Data.DataBind();
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
con.Dispose();
}
MYSTOREDPROCEDURE
USE [PaySwitch]
GO
/****** Object: StoredProcedure [dbo].[GetMemberDetailsByID] Script Date: 03/02/2014 15:19:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetMemberDetailsByID] (
@MBID VARCHAR (20)
)
AS
BEGIN
SELECT MBCompanyName, MBContactAddress1, MBContactCity,MBContactCountry, MBContactPostCode, MBContactPhone,MBContactEmailAdmin,MInstitutions FROM [dbo].[Members]
WHERE MBID=@MBID
END
MYERROR
Exception Details: System.Data.SqlClient.SqlException: Error converting data type varchar to int.
Source Error:
Line 38: DataSet ds = new DataSet();
Line 39: cmd.Parameters.Add("@MBID", SqlDbType.VarChar).Value = (txtSearch.Text.Trim());
Line 40: cmd.ExecuteNonQuery();
Line 41: cmd.Connection = con;
Line 42:
InformationsquelleAutor Hannah | 2014-02-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Fehler scheint es, dass Ihre Spalte
MBID
in der TabelleMembers
ist der Typint
und Sie versuchen, zu vergleichen mitVARCHAR
. Ändern Sie Ihre gespeicherten Prozedur zu erhalten, einen parameter vom Typint
stattVARCHAR
wie:und zum senden von Parametern über C# verwenden, AddWithValue Methode wie:
Ich habe geändert meine Antwort (oben), um diese zu reflektieren.
InformationsquelleAutor Habib
UPDATE (nach dem Autor des Kommentars über int zu groß).
Als Sie bemerkt, der Wert ist zu groß für die Int32. Wenn MBID ist nur ein "code", und Sie brauchen nicht die numerischen Bedeutung des Wertes, dann können Sie die Verwendung von varchar in SQL Server und string, die in C# als Datentyp für die MBID.
Ihre gespeicherte Prozedur und ein SqlParameter-Erstellung bereits Zeichenfolgen verwenden, so müssen Sie nur ändern Sie den Datentyp auf Ihre Tabelle varchar(20) (passen Sie die Größe entsprechend an).
Hier ist SQL ändern Tabelle:
(Ich bin sicher, Sie wird nicht, aber nur um sicherzustellen, dass don T führen Sie es in der Produktion vor der Prüfung woanders):
können Sie weitere Schlüsselwörter hinzufügen, um die obige Abfrage, um die Spalte keine null-Werte zu erstellen-Einschränkungen, etc.
Alternativ, wenn Sie wollen stick in einen numerischen Typ, die Sie verwenden können dezimal (es existiert in SQL und C#).
Alte Antwort:
Der Fehler kommt aus der gespeicherten Prozedur nicht aus .Net.
Ein möglicher Grund: Ihre MBID parameter ist vom Datentyp varchar(20), aber die MBID-Spalte in der Mitglieder ist vom Datentyp int. Ändern Sie den parameter auf int und sehen, ob es das problem behebt.
Müssen Sie auch ändern Sie diese Zeile in C#:
zu
InformationsquelleAutor Fayilt
Danke Jungs für Eure Hilfe. wirklich geschätzt werden.
Ich habe die MBID-Datentyp zurück, varchar (20).
Dann die änderungen am code in c#
Und bekam die Ergebnisse.
Wieder einmal, vielen Dank.
InformationsquelleAutor Hannah