| ■52410 / inTopicNo.1) | 
               MS-Accessデータがカレンダに表示できない | 
             
          
         
        
        □投稿者/ akira (3回)-(2010/08/08(Sun) 22:16:05)  
        
          
            
              
                 | 
                 分類:[ASP.NET (VB)] 
 
 MS-Accessのデータをカレンダコントロールに表示したいのですが、表示出来ずに困って
います。解決のヒントが頂ければ助かります。
MS-Accessのデータを↓このページの様にカレンダコントロールに表示したいです。
「Calendarコントロールのセルに任意のデータを埋め込むには?」
http://www.atmarkit.co.jp/fdotnet/dotnettips/277aspcalceldata/aspcalceldata.html
先ずは↓このページのASP.NET2.0から提供されたObjectDataSourceコントロールを用いた
http://www.atmarkit.co.jp/fdotnet/vs2005db/vs2005db_06/vs2005db_06_01.html
方法にSQL ServerをDBとして↓このページを改造しました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/277aspcalceldata/aspcalceldata.html
結果、DBにSQL Serverを利用した場合は、希望通りデータをカレンダに表示する事が
出来ました。
次にDBの接続をSQL ServerからMS-Accessに変更したのですが、エラーメッセージは何も
でないのですが、画面にはカレンダだけ表示され、表示して欲しいMS-Accessに入力され
ている予定情報が表示されません。
MS-Accessに接続する為のConnectionString情報やProviderName情報は↓このページ情報
http://3939deb.seesaa.net/article/107785168.html#more
を参考にしました。
<%@ Page Language="VB" ContentType="text/html" %>
<%@ Import Namespace="System.Data.Common" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="Server">
    'MS-AccessDBのConnectionString
    Dim MyDbConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\AccessDB.mdb;Persist Security Info=True"
    'MS-AccessDBのProviderName
    Dim MyDbProviderName As String = "System.Data.OleDb"
    
    ' それぞれの日付セルをレンダリングするタイミングで実行
    Sub cal_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs)
        
        Dim setting As ConnectionStringSettings = _
          ConfigurationManager.ConnectionStrings(MyDbConnectionString)
        Dim factory As DbProviderFactory = _
          DbProviderFactories.GetFactory(MyDbProviderName)
        
        Using objDb As DbConnection = factory.CreateConnection()
            objDb.ConnectionString = MyDbConnectionString
            
            ' 出力する日付セルに対応するスケジュール情報を抽出
            Dim objCom As DbCommand = factory.CreateCommand()
            objCom.CommandText = "SELECT [ID],[title],[sdate],[stime],[etime] FROM [schedule01] WHERE [sdate]=@sdate ORDER BY [stime] ASC"
            objCom.Connection = objDb
            
            Dim objPrm As DbParameter = factory.CreateParameter()
            objPrm.ParameterName = "@sdate"
            objPrm.Value = e.Day.Date
            objCom.Parameters.Add(objPrm)
            
            objDb.Open()
            
            Dim objRd As DbDataReader = objCom.ExecuteReader()
            ' 取得したスケジュール情報を基に
            ' LiteralControl(固定文字列)を生成し、
            ' 日付セル(e.Call)配下のコントロールとして追加
            Do While objRd.Read()
                e.Cell.Controls.Add(New LiteralControl("<br />" & String.Format("{0}〜{1}:{2}", objRd.GetString(3), objRd.GetString(4), objRd.GetString(1))))
            Loop
        End Using
    End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>スケジュールをカレンダー上に表示する</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
  <asp:Calendar id="cal" runat="server"
    DayHeaderStyle-BackColor="#FFCC66"
    onDayRender="cal_DayRender" ShowGridLines="true"
    BorderWidth="3" BorderColor="Black" Font-Name="Verdana"
    Font-Size="10px" TitleStyle-BackColor="#FFCC66"
    TitleStyle-Font-Size="12px" TitleStyle-Font-Bold="true"
    DayStyle-VerticalAlign="Top" DayStyle-Height="50px"
    DayStyle-Width="14%" SelectedDayStyle-BackColor="Navy"
    ShowNextPrev="True" NextPrevFormat="FullMonth"> 
    <SelectedDayStyle BackColor="#CC5533" />
  </asp:Calendar>
        <br />
    
    </div>
    </form>
</body>
</html>
DBをSQL Serverに変更すると正しく動いてくれました。
'SQL ServerDBのConnectionString
Dim MyDbConnectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SQLCalendar.mdf;Integrated Security=True;User Instance=True"
'SQL ServerDBのProviderName
Dim MyDbProviderName As String = "System.Data.SqlClient"
また、AccessDataSourceコントロールでGridViewにMS-Accessデータを表示させてみると
正しく表示されました。
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="ID" DataSourceID="AccessDataSource1">
            <Columns>
                <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
                    ReadOnly="True" SortExpression="ID" />
                <asp:BoundField DataField="title" HeaderText="title" SortExpression="title" />
                <asp:BoundField DataField="sdate" HeaderText="sdate" SortExpression="sdate" />
                <asp:BoundField DataField="stime" HeaderText="stime" SortExpression="stime" />
                <asp:BoundField DataField="etime" HeaderText="etime" SortExpression="etime" />
            </Columns>
        </asp:GridView>
        <asp:AccessDataSource ID="AccessDataSource1" runat="server" 
            DataFile="~/App_Data/AccessDB.mdb" 
            SelectCommand="SELECT [ID], [title], [sdate], [stime], [etime] FROM [schedule01]">
        </asp:AccessDataSource>
        <br />
    
    </div>
    </form>
</body>
</html>
開発:vwd2008、MS-Access2003、SQL Server2008
アドバイスよろしくお願い申し上げます。
  | 
               
            
           
         
        
       |