Har lite problem med ett command som exekverar en lagrad proceduren på servern... Trots en alldeles lysand koddump så verkar det som om du ändå inte gess oss tillräckligt. Koden för commandet: Lokaliserade problemet:Object must implement IConvertible...
proceduren:
<code>
create proc sp_AddDirectory
@Name char(50),
@Parent int,
@Result int output
as
....
</code>
koden (asp.net sidan (c#)):
<code>
if(this.twDirectories.GetNodeFromIndex(this.twDirectories.SelectedNodeIndex).Parent.ToString() != "user")
{
this.sqlCmdCreateDir.Parameters["@Parent"].Value = this.twDirectories.GetNodeFromIndex(this.twDirectories.SelectedNodeIndex).Parent;
}
else
{
this.sqlCmdCreateDir.Parameters["@Parent"].Value = null;
}
this.sqlCmdCreateDir.Parameters["@Name"].Value = this.tbNewDir.Text;
try
{
this.sqlConn.Open();
this.sqlCmdCreateDir.ExecuteNonQuery();
}
catch(Exception x)
{
this.tbDirDesc.Text = x.Message;
this.tbDirDesc.Text += "\n" + x.Source;
}
finally
{
this.sqlConn.Close();
}
</code>
Felmedelande:
<code>
Object must implement IConvertible.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidCastException: Object must implement IConvertible.
Source Error:
Line 471: this.sqlConn.Open();
Line 472:
Line 473: this.sqlCmdCreateDir.ExecuteNonQuery();
Line 474: }
</code>
Help?
Sv: Object must implement IConvertible...
Om jag fattar det hela rätt så är det raden:
<code>
this.sqlCmdCreateDir.ExecuteNonQuery();
</code>
som det hela kraschar på. Du har tyvärr utelämnat det.
Men i vilket fall som helst så är sqlCmdCreateDir som inte riktigt beter sig som det ska och att du måste implementera IConvertible. Detta måste du göra genom att skapa en egen klass som implementerar just IConvertible. Den ska också ha en metod för att skapa just dit cmd-objekt. Det är i alla fall vad felet säger.
DOCK så känns det hela lite fel. Det känns som om felet ligger någon annan stans eftersom din kod i sig inte innehåller några fel. Du verkar gör en juste koppling och så. det borde du ju kunna.
Faktum är att jag tror inte ens att VS skulle låta dig bygga koden. Den skulle få ett kompileringsfel.
Kort och gott. Jag tror inte att felet som uppstår egentligen ligger i den kod som du visar upp.
//Mikael.NETSv: Object must implement IConvertible...
<code>
this.sqlCmdCreateDir.CommandText = "sp_AddDirectory";
this.sqlCmdCreateDir.CommandType = System.Data.CommandType.StoredProcedure;
this.sqlCmdCreateDir.Connection = this.sqlConn;
this.sqlCmdCreateDir.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Name", System.Data.SqlDbType.VarChar, 50));
this.sqlCmdCreateDir.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Parent", System.Data.SqlDbType.Int));
</code>
komplett felmedelande:
<code>
Object must implement IConvertible.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidCastException: Object must implement IConvertible.
Source Error:
Line 472: this.sqlConn.Open();
Line 473:
Line 474: this.sqlCmdCreateDir.ExecuteNonQuery();
Line 475: }
Line 476: //catch(Exception x)
Source File: d:\wwwroot\jbg.net\filemanager\default.aspx.cs Line: 474
Stack Trace:
[InvalidCastException: Object must implement IConvertible.]
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) +643
System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +206
filemanager.WebForm1.btnCreateDir_Click(Object sender, EventArgs e) in d:\wwwroot\jbg.net\filemanager\default.aspx.cs:474
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain() +1263
</code>
Förklarade detta något?Sv: Object must implement IConvertible...
<code>
this.sqlCmdCreateDir.Parameters["@Parent"].Value = this.twDirectories.GetNodeFromIndex(this.twDirectories.SelectedNodeIndex).Parent; </code>
ersatte jag med:
<code>
string foo = this.twDirectories.GetNodeFromIndex(this.twDirectories.SelectedNodeIndex).Parent.ToString();
this.sqlCmdCreateDir.Parameters["@Parent"].Value = foo;
</code>