Errore alla lettura di un db con piu di 1 record

martedì 18 maggio 2010 - 14.56

basicdany Profilo | Expert

CIao, a tutti eseguo la lettura di un db sql server contenente una tabella di nome fotoimmobili, in base a idiimmobile, se trova un record visualizza
la foto senza problemi in un gridview se ci sono piu di un record, genera questo errore:


Impossibile attivare i vincoli. Una o più righe contengono valori che violano il vincolo non-null, unique o foreign-key.
Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere l'analisi dello stack.

Dettagli eccezione: System.Data.ConstraintException: Impossibile attivare i vincoli. Una o più righe contengono valori che violano il vincolo non-null, unique o foreign-key.

Errore nel codice sorgente:


Riga 1355: Me.Adapter.SelectCommand.Parameters(0).Value = CType(ID,Integer)
Riga 1356: Dim dataTable As ElencoImmobili.QDettagliGPDataTable = New ElencoImmobili.QDettagliGPDataTable
Riga 1357: Me.Adapter.Fill(dataTable)
Riga 1358: Return dataTable
Riga 1359: End Function


la griglia e imposta cosi:
<asp:GridView ID="GridView1" runat="server" AllowSorting="True"
DataKeyNames="IdImmobile" AutoGenerateColumns="False"
DataSourceID="ObjectDataSourceFoto" CellPadding="4" ForeColor="#333333"
GridLines="None">
<RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
<Columns>
<asp:BoundField DataField="Descrizione" />
<asp:TemplateField>
<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%# "~/ImageGrabber.ashx?IdImmobile=" & Eval("IdImmobile") %>' />
</ItemTemplate>
<ControlStyle Height="200px" Width="200px" />
</asp:TemplateField></Columns>
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>

questa e la classe ImageGrabber.ashx dove viene passato id al click sulla griglia da una pagina precedente a questa:




public class ImageGrabber : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
// Grab the comic ID from the query string and validate it
string id = context.Request["IdImmobile"];
if (String.IsNullOrEmpty (id))
return;

int ComicID = -1;
try {
ComicID = Convert.ToInt32 (id);
}
catch (FormatException) {
return;
}

// Check for the image in the application cache
string key = ComicID.ToString ();
byte[] image = (byte[]) context.Cache[key];

// If the image isn't in the cache, get it from the database
if (image == null) {
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["GestioneVenditaImmobileSqlConnectionString"].ConnectionString);
try
{
connection.Open();

//SqlCommand command = new SqlCommand("SELECT Foto FROM ImmobileFoto WHERE IdImmobile=@IdImmobile", connection);
//command.Parameters.Add("@IdImmobile", SqlDbType.SmallInt).Value = ComicID;
//image = (byte[]) command.ExecuteScalar ();

string sql = "Select Foto from ImmobileFoto where IdImmobile=@IdImmobile";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.Parameters.Add("@IdImmobile", SqlDbType.Int).Value = Convert.ToInt32(context.Request.QueryString["IdImmobile"]);
cmd.Prepare();
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
context.Response.ContentType = "jpeg";//dr["Image_Type"].ToString();
context.Response.BinaryWrite((byte[])dr["Foto"]);


// Cache the image and include a SqlCacheDependency

}
finally
{
connection.Close();
}
}

// Return the image in the HTTP response
if (image != null) {
context.Response.ContentType = "image/jpeg";
context.Response.OutputStream.Write (image, 0, image.Length);
}
}

public bool IsReusable
{
get { return false; }
}
}

LA TABELLA UTILIZZATA NON HA RELAZIONI.

CIAO GRAZIE A TUTTI

alx_81 Profilo | Guru

>CIao,
Ciao
>a tutti eseguo la lettura di un db sql server contenente
>una tabella di nome fotoimmobili, in base a idiimmobile, se trova
>un record visualizza la foto senza problemi in un gridview se ci sono piu di un record,
>genera questo errore:
>
>
>Impossibile attivare i vincoli. Una o più righe contengono valori
>che violano il vincolo non-null, unique o foreign-key.
com'è definito il datatable? perchè se il datatable non ha l'attributo nullable sulle colonne, un record con un valore null in uno dei suoi campi solleva quell'errore.
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

basicdany Profilo | Expert

Ciao, ho realizzato un dataset tipizzato con questa query:

SELECT IdImmobile, Foto, Descrizione, FotoPrima FROM ImmobileFoto WHERE (IdImmobile = @ID)

e collegato un datasource al dataset

<asp:ObjectDataSource ID="ObjectDataSourceFoto" runat="server"
OldValuesParameterFormatString="original_{0}" SelectMethod="GetData"
TypeName="ElencoImmobiliTableAdapters.ImmobileFotoTableAdapter">
<SelectParameters>
<asp:QueryStringParameter DefaultValue="0" Name="ID" QueryStringField="ID"
Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>

e infine come ti dicevo prima la gridview al datasurce?

La tabella che uso non e lagata a nessun altra tabella, non capisco?

ciao grazie





alx_81 Profilo | Guru

>La tabella che uso non e lagata a nessun altra tabella, non capisco?
ehm.. hai accettato, quindi hai risolto?
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

basicdany Profilo | Expert

Ciao ti ho gia accettato la risposta pero il problema non lo risolto ti
spiego,

nella pagina in questione ci sono 2 datasource che hanno come parametro
dall'altra pagina :

Response.Redirect("Dettagli.aspx?IDFoto=" & GridView1.SelectedValue.ToString)

quindi nella pagina:

-un data source riempi una dettalsview che prende i dati da una tabella ed e
sempre un solo record

-altro datasource che prende i dati da un altra tabella, quando i record sono
piu di uno si genera l'errore!, ho provato ha usare solo questo dataosurce e
FUNZIONA MI CARICA
TUTTE LE FOTO CHE LEGGE DAL DB

Pensavo di risolvere passando 2 parametri indipendenti in quest amaniera:


Response.Redirect("Dettagli.aspx?IDFoto=" & GridView1.SelectedValue.ToString)
Response.Redirect("Dettagli.aspx?IDdettagli=" & GridView1.SelectedValue.
ToString)


, ma ho visto che esegue solo il primo l'altro no:



ciao grazie

alx_81 Profilo | Guru

>, ma ho visto che esegue solo il primo l'altro no:
fammi capire, il primo detailsview funziona sempre. Giusto?
l'altro invece ti restituisce l'errore di relazione??
Perdonami ma senza vedere il codice faccio fatica a capire il tuo problema, puoi provare a spiegarti un po' meglio con un po' di codice magari?

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5