Snälla, hjälp mig med detta förmodligen väldigt simpla problem. Om du debuggar och stoppar på raden Kan inte debugga eftersom jag kör mot en svn :( <b>Kan inte debugga eftersom jag kör mot en svn :(</b> Har nu löst problemet med att jag inte kunde debugga (servern var tillfälligt stängd när jag testade), och konstaterar då att värdet är NULL, vilket jag inte tillåter.Hämta id från querystring och föra in i databasen
Jag har med mig alla id till en sida som heter createTest. Querysträngen ser ut enligt följande;
http://xxx.xxxx.xxx/....../LoggedIn/Usecase/CreateTestCase.aspx?projectID=11&usecaseID=209&scenarioID=1016
Mitt problem är hur jag nu hämtar det sista id't, alltså scenarioID=1016, och skickar med det till databasen tillsammans med alla andra värden. För tillfället ser det ut såhär i codebehind i en funktion för "Spara"-knappen på sidan:
TextBox name = (TextBox)fwTestCase.FindControl("name");
TextBox step01 = (TextBox)fwTestCase.FindControl("step01");
TextBox step02 = (TextBox)fwTestCase.FindControl("step02");
TextBox testcaseID = (TextBox)fwTestCase.FindControl("testcaseID");
TextBox testcasepass = (TextBox)fwTestCase.FindControl("testcasepass");
string ScenarioID = Request.QueryString("scenarioID");
Alla värden förs in i databasen, utom just detta scenarioID. Vad gör jag för fel?
Om ni undrar så har jag också ett par klassfiler som gör att det hela fungerar, men felet lär finnas i koden här ovan.Sv: Hämta id från querystring och föra in i databasen
string ScenarioID = Request.QueryString("scenarioID");
vad tilldelas ScenarioID för värde?Sv:Hämta id från querystring och föra in i databasen
Sv: Hämta id från querystring och föra in i databasen
På vilket sätt påverkar det att du inte kan debugga?
Om du inte kan göra det får du skriva ut innehållet i en textbox eller liknande, helt omöjligt att felsöka om man inte ser vilken indata du har.
/JohanSv:Hämta id från querystring och föra in i databasen
Alltså måste jag göra något fel när jag hämtar id't från querystringen:
<asp:FormView ID="fwTestCase" runat="server" DataSourceID="dsTestCase" DefaultMode="Insert" >
<InsertItemTemplate>
<asp:TextBox ID="name" runat="server" Text="<%# Bind('TestCaseName') %>" ></asp:TextBox>
<asp:Button ID="btnSparaTestCase" Text="Spara" CommandName="Insert" runat="server" OnClick="btnSparaTestCase_Click" />
</InsertItemTemplate>
</asp:FormView>
<asp:ObjectDataSource DataObjectTypeName="TestCase"
ID="dsTestCase"
runat="server"
InsertMethod="InsertTestCase"
TypeName="TestCaseDB"
SelectMethod="GetTestCase">
<InsertParameters>
<asp:QueryStringParameter Name="scenarioID" QueryStringField="scenarioID" Type="Int32" />
</InsertParameters>
</asp:ObjectDataSource>
I codebehind ser det ut såhär:
protected void btnSparaTestCase_Click(object sender, System.EventArgs e)
{
TextBox name = (TextBox)fwTestCase.FindControl("name");
int scenarioID = int.Parse(Request.QueryString["scenarioID"]);
}
}
Har det någon betydelse att querystringen har flera olika id'n:
CreateTestCase.aspx?projectID=11&usecaseID=208&scenarioID=1014
?
I klassfilerna ser det ut enligt följande:
TestCase.cs
public class TestCase
{
public TestCase()
{
// en tom konstruktor
}
private int scenarioID;
public int ScenarioID
{
get { return scenarioID; }
set { scenarioID = value; }
}
public TestCase(int testCaseID, int scenarioID, string steg01, string steg02, string steg03, string steg04, string steg05, string steg06, string steg07, string steg08, string steg09, string steg10, int testCasePass, string testCaseName)
{
this.TestCaseID = testCaseID;
this.ScenarioID = scenarioID;
osv...
}
}
TestCaseDB.cs
public class TestCaseDB
{
public TestCaseDB()
{
// tom konstruktor
}
public int InsertTestCase(TestCase testcase)
{
// connectionsträngen, skapar ny connection
string ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString;
SqlConnection con = new SqlConnection(ConnectionString);
// anger namnet på proceduren och talar om att det är en stored procedure
SqlCommand cmd = new SqlCommand("TestCase.SparaTestCase", con);
cmd.CommandType = CommandType.StoredProcedure;
// skapar nya parametrar som håller värdena
cmd.Parameters.Add(new SqlParameter("@ScenarioID", SqlDbType.Int));
cmd.Parameters["@ScenarioID"].Value = testcase.ScenarioID;
osv...
cmd.Parameters.Add(new SqlParameter("@TestCaseID", SqlDbType.Int));
cmd.Parameters["@TestCaseID"].Direction = ParameterDirection.Output;
try
{
// Öppna connection och kör frågan
con.Open();
cmd.ExecuteNonQuery();
return (int)cmd.Parameters["@TestCaseID"].Value;
}
catch(Exception sErr)
{
throw new Exception(sErr.Message);
}
finally
{
con.Close(); // Stänger anslutningen
}
}
}