AJ0424
asked on
Scope Question - "Local Variable Already Defined in Scope"
Hello!
I am new to development of any kind and I have what I think is a scope problem but I do not know how to fix it.
What I am trying to do:
The page in question (FileUpload.aspx) is a page that allows a user to upload a file to a folder. I am trying to capture the fileid (scope_identity) and username (of the user logged in) (I have done this). The next part is to use the username as a parameter for a stored proc that will return the guid for the username value.
After I have both the fileid and the userid (guid), I need to run an insert stored proc that inputs both to a linking table. This table has an id pk, userid, fileid.
Where I am stuck:
I had help in setting this next part up and I really do not yet fully understand everything that is happening here (at least not enough to really trouble shoot). What I have is another page (ClientFileRepository.aspx ) that has a class with several methods for retrieving data from stored procs. On the original page (FileUpload.aspx) I am using two methods in one "if" block - one is an insert, the other a select. The build fails and tells me that "A local variable "repository" is already defined in this scope." but if I rename it, it renames it in both instances.
At this point I am in over my head...I thought I needed them together because each returns a value I need to insert into a table. I am at a loss as to how this should be rewritten so that I can grab both values and insert them into my table. I assume this will require yet another method which will just complicate the matter further.
Can anyone tell me what I am doing wrong? Any help would be appreciated!!
Thanks,
AJ
I am new to development of any kind and I have what I think is a scope problem but I do not know how to fix it.
What I am trying to do:
The page in question (FileUpload.aspx) is a page that allows a user to upload a file to a folder. I am trying to capture the fileid (scope_identity) and username (of the user logged in) (I have done this). The next part is to use the username as a parameter for a stored proc that will return the guid for the username value.
After I have both the fileid and the userid (guid), I need to run an insert stored proc that inputs both to a linking table. This table has an id pk, userid, fileid.
Where I am stuck:
I had help in setting this next part up and I really do not yet fully understand everything that is happening here (at least not enough to really trouble shoot). What I have is another page (ClientFileRepository.aspx
At this point I am in over my head...I thought I needed them together because each returns a value I need to insert into a table. I am at a loss as to how this should be rewritten so that I can grab both values and insert them into my table. I assume this will require yet another method which will just complicate the matter further.
Can anyone tell me what I am doing wrong? Any help would be appreciated!!
Thanks,
AJ
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient; //had to add to connect to sql
namespace FileTransfer2
{
public partial class FileUpload : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void lbtnReturntoHome_Click(object sender, EventArgs e)
{
Response.Redirect("default.aspx");
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
//lblResults.Text = "";
if (FileUpload1.HasFile)
try
{
string folderPath = ConfigurationManager.AppSettings["UploadDirectory"];
string filePath = System.IO.Path.Combine(folderPath, FileUpload1.FileName); //concatenates path + file name
FileUpload1.SaveAs(filePath);
lblResults.Text = "File Successfully Uploaded: <br>" + "File name: " +
FileUpload1.FileName + "<br>" +
FileUpload1.PostedFile.ContentLength + " kb<br>" +
"Content type: " +
FileUpload1.PostedFile.ContentType;
ClientFileRepository repository = new ClientFileRepository();
int fileid = repository.InsertNewFile(FileUpload1.FileName, txtDescription.Text, filePath);
string UserName = User.Identity.Name;
//This is where I am having a problem
ClientFileRepository repository = new ClientFileRepository();
DataTable UserGuid = repository.GetUserGuid(UserName);
if (UserGuid != null && UserGuid.Rows.Count > 0)
{
string UserID = UserGuid.Rows[0]["UserId"].ToString();
Response.Write(UserID);
}
else
{
Response.Write("No userid found.");
}
lblError.Text = "";
}
catch (Exception ex) //this should catch if jibberish is entered but it doesn't
{
//lblError.Text = "Error: File was not found.";
Response.Write("Error: " + ex.Message);
}
else
{
txtDescription.Text = "";
lblResults.Text = "";
lblError.Text = "You have not specified a file.";
}
}
}
}
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace FileTransfer2
{
public class ClientFileRepository
{
public int InsertNewFile(string fileName, string description, string clientfile)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["FileTransferConnectionString"].ToString()))
{
using (SqlCommand cmd = new SqlCommand("InsertNewFile", conn)) //stored proc name
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@FileName", fileName);
cmd.Parameters.AddWithValue("@Description", description);
cmd.Parameters.AddWithValue("@ClientFile", clientfile);
conn.Open();
return int.Parse(cmd.ExecuteScalar().ToString()); //returns scope_identity from proc
}
}
}
public DataTable GetFileInfo(int id)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["FileTransferConnectionString"].ToString()))
{
using (SqlCommand cmd = new SqlCommand("getFilebyFileID", conn)) //stored proc name
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Id", id);
SqlDataAdapter daFilesbyId = new SqlDataAdapter(cmd);
DataTable FilesbyId = new DataTable();
conn.Open();
daFilesbyId.Fill(FilesbyId);
return FilesbyId;
}
}
}
public DataTable GetUserGuid(string UserName)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["FileTransferConnectionString"].ToString()))
{
using (SqlCommand cmd = new SqlCommand("getUserID", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@UserName", UserName);
SqlDataAdapter daGetUserGuid = new SqlDataAdapter(cmd);
DataTable UserGuid = new DataTable();
conn.Open();
daGetUserGuid.Fill(UserGuid);
return UserGuid;
}
}
}
}
}
SQL:
ALTER proc [dbo].[getUserID]
@UserName nvarchar(256)
AS
select
u.UserId
from aspnet_Users u
where u.UserName = @UserName
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks everyone! That worked perfectly and now I have a better understanding of what that code is actually doing!
I appreciate it!!
AJ
I appreciate it!!
AJ
ASKER
Thank you all very much - I hope you don't mind, I split the points since you all helped me.
CuteBug, I especially appreciate the explanation behind your answer - it cleared up a bit of the mystery for me!
Thanks,
AJ
CuteBug, I especially appreciate the explanation behind your answer - it cleared up a bit of the mystery for me!
Thanks,
AJ
ClientFileRepository repository = new ClientFileRepository();
to
repository = new ClientFileRepository();