Diskuze: Získávání dat z databáze
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


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?
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é...
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>
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"...
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...
<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();
}
Zobrazeno 8 zpráv z 8.