I am trying to update a single field in a SQL database table. I created a SQLDataSource, configured Select and Update queries, and wrote some code in the script block to do the update after a button click. The SQLDataSource is in a contentplaceholder. What am I doing wrong in the data source, the script block, or both? Thanks so much in advance...
Here is the code for the SQLDataSource:
Dim ImageUploaded As Integer = 2
srcUpdateImageUploaded.UpdateParameters("@.ImageUploaded").DefaultValue = ImageUploaded
srcUpdateImageUploaded.Update()
Here is the code in the script block:
<asp:SqlDataSource ID="srcUpdateImageUploaded" runat="server" ConnectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\UserProfilesDB.mdf;Integrated Security=True;User Instance=True"
ProviderName="System.Data.SqlClient"
SelectCommand="SELECT [ImageUploaded] FROM [profiles_BasicProperties] WHERE ([UserName] = @.UserName)"
UpdateCommand="UPDATE profiles_BasicProperties SET [ImageUploaded] = ?">
<UpdateParameters>
<asp:ControlParameter ControlID="TextBox1" Name="EmilyTheKitty" PropertyName="Text" Type="Object" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" Name="UserName" PropertyName="Text" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
Here is the error that I get:
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 164: Dim ImageUploaded As Integer = 2
Line 165:
Line 166: srcUpdateImageUploaded.UpdateParameters("@.ImageUploaded").DefaultValue = ImageUploaded
Line 167: srcUpdateImageUploaded.Update()
Line 168:
Source File: C:\Users\Matthew\Documents\Group 02 - Politicore\PC_Dev\Profiles_BuildProfile.aspx Line: 166
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
ASP.profiles_buildprofile_aspx.PictureUpload(Object sender, EventArgs e) in C:\Users\Matthew\Documents\Group 02 - Politicore\PC_Dev\Profiles_BuildProfile.aspx:166
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +104
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5614
There is no @.ImageUploaded parameter in your SQLDataSource, See the modified code below
<asp:SqlDataSource ID="srcUpdateImageUploaded" runat="server" ConnectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\UserProfilesDB.mdf;Integrated Security=True;User Instance=True"
ProviderName="System.Data.SqlClient"
SelectCommand="SELECT [ImageUploaded] FROM [profiles_BasicProperties] WHERE ([UserName] = @.UserName)"
UpdateCommand="UPDATE profiles_BasicProperties SET [ImageUploaded] = @.ImageUploaded">
<UpdateParameters>
<asp:ControlParameter ControlID="TextBox1" Name="ImageUploaded" PropertyName="Text" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" Name="UserName" PropertyName="Text" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
I appreciate the response...but it didn't work. I tried the modified code you posted. I pasted it into my page, tried it, and got the "Object reference not set to an instance of an object" again. Here is the code that I copied out of my page (it's the same code you posted)...
<asp:SqlDataSourceID="srcUpdateImageUploaded"runat="server"ConnectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\UserProfilesDB.mdf;Integrated Security=True;User Instance=True"
ProviderName="System.Data.SqlClient"
SelectCommand="SELECT [ImageUploaded] FROM [profiles_BasicProperties] WHERE ([UserName] = @.UserName)"
UpdateCommand="UPDATE profiles_BasicProperties SET [ImageUploaded] = @.ImageUploaded">
<UpdateParameters>
<asp:ControlParameterControlID="TextBox1"Name="ImageUploaded"PropertyName="Text"Type="Int32"/>
</UpdateParameters>
<SelectParameters>
<asp:ControlParameterControlID="TextBox1"Name="UserName"PropertyName="Text"Type="String"/>
</SelectParameters>
</asp:SqlDataSource>
|||where you are trying to update your code?? is it in the page load event ?? and also try to change asp:controlParameter into asp:FormParameter. If still not solved pls paste the whole code I will look into it
|||Okay...I changed my mind on how I want to do this. I did away with the SQL data source connection object and I want to do this entirely with code in the script block. There is a command button that is clicked which invokes the following code. A textbox is included on the page and it is called by the code. The new error I get is this:
" Error updating table. Must declare the scalar variable "@.updatevalue". "
Here is the entirety of the code that is called:
ProtectedSub cmdUpdate_Click(ByVal senderAsObject, _
ByVal eAs EventArgs)Handles cmdUpdate.Click'a temporary variable that is hard coded to 2 for testing...
Dim updatevalueAs Int32updatevalue = 2
Dim usernameAsString
username = txtUserName.Text
Dim connectionstringAsString
connectionstring ="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\UserProfilesDB.mdf;Integrated Security=True;User Instance=True"
' Define ADO.NET objects.
Dim updateSQLAsString
updateSQL ="UPDATE profiles_BasicProperties SET "
updateSQL &="ImageUploaded=@.updatevalue "
updateSQL &="WHERE username=@.username"
Dim conAsNew SqlConnection(connectionString)Dim cmdAsNew SqlCommand(updateSQL, con)
' Add the parameters.
cmd.Parameters.AddWithValue("@.ImageUploaded", updatevalue)' Try to open database and execute the update.
Try
con.Open()
Dim updatedAsInteger = cmd.ExecuteNonQuery()lblResults.Text = updated.ToString() &" records updated."
Catch errAs Exceptionlblresults.Text ="Error updating table. "
lblResults.Text &= err.Message
Finally
con.Close()
EndTry
EndSub
|||Okay, I fixed my own problem. I also figured out how these lines are put together so I am beyond merely cutting and pasting code in from books. Here is the correct code (corrected lines in bold, italics, and underlined):
ProtectedSub cmdUpdate_Click(ByVal senderAsObject, _
ByVal eAs EventArgs)Handles cmdUpdate.Click
'a temporary variable that is hard coded to 2 for testing...
Dim updatevalueAs Int32updatevalue = 2
Dim usernameAsString
username = txtUserName.Text
Dim connectionstringAsString
connectionstring ="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\UserProfilesDB.mdf;Integrated Security=True;User Instance=True"
' Define ADO.NET objects.
Dim updateSQLAsString
updateSQL ="UPDATE profiles_BasicProperties SET "
updateSQL &="ImageUploaded=@.ImageUploaded "
updateSQL &="WHERE username=@.username"
Dim conAsNew SqlConnection(connectionString)Dim cmdAsNew SqlCommand(updateSQL, con)
' Add the parameters.
cmd.Parameters.AddWithValue("@.ImageUploaded", updatevalue)cmd.Parameters.AddWithValue("@.username", username)
' Try to open database and execute the update.
Try
con.Open()
Dim updatedAsInteger = cmd.ExecuteNonQuery()
lblResults.Text = updated.ToString() &" records updated."
Catch errAs Exceptionlblresults.Text ="Error updating table. "
lblResults.Text &= err.Message
Finally
con.Close()
EndTry
EndSub
No comments:
Post a Comment