Diskuze: Získávání dat z databáze
Člen
Odpovídá na Wayne
vodslon:1.12.2014 8:00
vodslon:1.12.2014 8:00
Ahoj, ty sloupce by mělo jednoduše řešit select query, můžeš sem prosím dát kod?
Odpovídá na Wayne
Michal Štěpánek:1.12.2014 12:11
Michal Štěpánek:1.12.2014 12:11
Napiš v čem to děláš a kus kódu, který to obsluhuje, takhle je to moc obecné...
Odpovídá na vodslon
Wayne:1.12.2014 16:33
Wayne:1.12.2014 16:33
Tady je datová třída
public class Kniha
{
private int id;
public int BookID { get { return id; } }
public string Nazev { get; set; }
public string Autor { get; set; }
public Kniha(int id, string nazev, string autor) {
this.id = id;
Nazev = nazev;
Autor = autor;
}
public Kniha(string nazev, string autor) {
Nazev = nazev;
Autor = autor;
}
public Kniha(){}
}
Databázová utilita
metoda pro vkládání
public int insertBook(Kniha kniha) {
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("insertBook",con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@BookID",SqlDbType.Int));
cmd.Parameters["@BookID"].Direction=ParameterDirection.Output;
cmd.Parameters["@BookID"].Value = kniha.BookID;
cmd.Parameters.Add(new SqlParameter("@Nazev", SqlDbType.NVarChar));
cmd.Parameters["@Nazev"].Value=kniha.Nazev;
cmd.Parameters.Add(new SqlParameter("@Autor", SqlDbType.NVarChar));
cmd.Parameters["@Autor"].Value = kniha.Autor;
con.Open();
int id = cmd.ExecuteNonQuery();
con.Close();
return id;
}
metoda pro výpis
public List<Kniha> getAllBooks()
{
List<Kniha> knihy = new List<Kniha>();
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("getAllBooks", con);
cmd.CommandType = CommandType.StoredProcedure;
try
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Kniha kniha = new Kniha((string)reader["Nazev"], (string)reader["Autor"]);
knihy.Add(kniha);
}
return knihy;
}
catch (SqlException err)
{
throw new ApplicationException("Data error");
}
finally {
con.Close();
}
}
A tady je ASP.NET
<body>
<form id="form1" runat="server">
<div>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="deleteBook" OnUpdating="ObjectDataSource1_Updating" UpdateMethod="Update Kniha SET Nazev=@Nazev, Autor=@Autor WHERE id=@id" InsertMethod="insertBook" SelectMethod="getAllBooks" TypeName="DataComponent.KnihaDB" ConflictDetection="CompareAllValues">
<InsertParameters>
<asp:Parameter Direction="ReturnValue" Name="BookID" Type="Int32" />
</InsertParameters>
<UpdateParameters >
<asp:Parameter Name="id" Type="Int32" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name="BookID" Type="Int32" />
</DeleteParameters>
</asp:ObjectDataSource>
<asp:DetailsView ID="DetailsView1" DefaultMode="Insert" AutoGenerateInsertButton="true" DataSourceID="ObjectDataSource1" runat="server" Height="50px" Width="125px" CellPadding="4" ForeColor="#333333" GridLines="None">
<AlternatingRowStyle BackColor="White" ForeColor="#284775"></AlternatingRowStyle>
<CommandRowStyle BackColor="#E2DED6" Font-Bold="True"></CommandRowStyle>
<EditRowStyle BackColor="#999999"></EditRowStyle>
<FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True"></FieldHeaderStyle>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></FooterStyle>
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></HeaderStyle>
<PagerStyle HorizontalAlign="Center" BackColor="#284775" ForeColor="White"></PagerStyle>
<RowStyle BackColor="#F7F6F3" ForeColor="#333333"></RowStyle>
</asp:DetailsView>
<asp:Label ID="lbInsert" runat="server" Text=""></asp:Label>
<br />
<br />
<asp:GridView ID="GridView1" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" Width="700px" DataSourceID="ObjectDataSource1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None">
<AlternatingRowStyle BackColor="White" ForeColor="#284775"></AlternatingRowStyle>
<EditRowStyle BackColor="#999999"></EditRowStyle>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></FooterStyle>
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></HeaderStyle>
<PagerStyle HorizontalAlign="Center" BackColor="#284775" ForeColor="White"></PagerStyle>
<RowStyle BackColor="#F7F6F3" ForeColor="#333333"></RowStyle>
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333"></SelectedRowStyle>
<SortedAscendingCellStyle BackColor="#E9E7E2"></SortedAscendingCellStyle>
<SortedAscendingHeaderStyle BackColor="#506C8C"></SortedAscendingHeaderStyle>
<SortedDescendingCellStyle BackColor="#FFFDF8"></SortedDescendingCellStyle>
<SortedDescendingHeaderStyle BackColor="#6F8DAE"></SortedDescendingHeaderStyle>
</asp:GridView>
</div>
</form>
</body>
Odpovídá na Wayne
Michal Štěpánek:1.12.2014 21:58
Michal Štěpánek:1.12.2014 21:58
Nevím, proč to děláš tak složitě? Jestliže máš v DB BookID jako autoincrement, podle mě by v INSERTu vůbec neměl figurovat. Proč si to neuděláš jednoduššeji? Dáš do ASP.NET SqlDataSource, kde si vygeneruješ automaticky příkazy a FormView si pak "nabinduješ" na to SqlDataSource. Automaticky se ti vytvoří textboxy a parametry příkazů se s nimi "spojí". Vše se pak provádí "samo"...
Odpovídá na Wayne
Michal Štěpánek:2.12.2014 18:18
Editováno 2.12.2014 18:19
Michal Štěpánek:2.12.2014 18:18
Viz můj příspěvek výše...
Těžko ti někdo poradí, když neuvedeš událost tlačítka...
Wayne:2.12.2014 19:02
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="getAllBooks" TypeName="DataComponent.KnihaDB" UpdateMethod="updateBook" DeleteMethod="deleteBook">
<DeleteParameters>
<asp:Parameter Name="id" Type="Int32"></asp:Parameter>
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="id" Type="Int32"></asp:Parameter>
<asp:Parameter Name="nazev" Type="String"></asp:Parameter>
<asp:Parameter Name="autor" Type="String"></asp:Parameter>
</UpdateParameters>
</asp:ObjectDataSource>
<asp:GridView ID="GridView1" DataSourceID="ObjectDataSource1" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:CommandField ButtonType="Button" ShowDeleteButton="True" ShowEditButton="True" />
<asp:BoundField DataField="Nazev" HeaderText="Nazev" SortExpression="Nazev"></asp:BoundField>
<asp:BoundField DataField="Autor" HeaderText="Autor" SortExpression="Autor" />
</Columns>
<EditRowStyle BackColor="#999999"/>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#E9E7E2" />
<SortedAscendingHeaderStyle BackColor="#506C8C" />
<SortedDescendingCellStyle BackColor="#FFFDF8" />
<SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>
public void updateBook(int id,string nazev,string autor) {
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("updateBook", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("Nazev", SqlDbType.NVarChar));
cmd.Parameters["Nazev"].Value = nazev;
cmd.Parameters.Add(new SqlParameter("Autor", SqlDbType.NVarChar));
cmd.Parameters["Autor"].Value = autor;
cmd.Parameters.Add(new SqlParameter("BookID", SqlDbType.Int));
cmd.Parameters["BookID"].Value = id;
try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
throw new ApplicationException("Data error");
}
finally
{
con.Close();
}
}
public int deleteBook(int id) {
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("deleteBook",con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@BookID", SqlDbType.Int));
cmd.Parameters["@BookID"].Value = id;
con.Open();
int radku = cmd.ExecuteNonQuery();
return radku;
con.Close();
}
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.
Zobrazeno 8 zpráv z 8.